検索
ホームページバックエンド開発Python チュートリアルPython プログラミングにおけるデコレーターの使用例の分析

装飾関数とメソッド

まず 2 つの単純な数学関数を定義します。1 つは二乗和を計算する関数、もう 1 つは二乗の差を計算する関数です。

リーリー
基本的な数学関数を用意した後、入力の出力など、他の関数を関数に追加することもできます。これを実現するために関数を書き直すことができます:

リーリー
関数の定義を修正し、関数に関数を追加しました。

ここで、デコレーターを使用して上記の変更を実装します。

リーリー
デコレーターは、上記のコードのデコレーターなど、def の形式で定義できます。デコレーターは、呼び出し可能オブジェクトを入力パラメーターとして受け取り、新しい呼び出し可能オブジェクトを返します。デコレータは、上記の new_F である新しい呼び出し可能オブジェクトを作成します。 new_F では、印刷関数を追加し、F(a, b) を呼び出すことで元の関数の機能を実装しました。

デコレータを定義した後、@ 構文を通じてそれを使用できます。関数 square_sum および square_diff が定義される前に @decorator を呼び出すことにより、実際には square_sum または square_diff をデコレーターに渡し、デコレーターによって返された新しい呼び出し可能オブジェクトを元の関数名 (square_sum または square_diff) に割り当てます。 したがって、 square_sum(3, 4) を呼び出すと、次と同等になります:

リーリー
Python では変数名とオブジェクトが分離されていることはわかっています。変数名は任意のオブジェクトを指すことができます。本質的に、デコレーターは変数名を再ポイントする役割 (名前バインディング) を果たし、同じ変数名が新しく返された呼び出し可能オブジェクトをポイントできるようにし、それによって呼び出し可能オブジェクトを変更するという目的を達成します。

関数の処理と同様に、デコレータを使用してクラスメソッドを処理できます。

他にも同様の関数がある場合は、関数を繰り返し変更したり、新しいパッケージを追加したりすることなく、引き続きデコレーターを呼び出して関数を変更できます。これにより、プログラムの再利用性が向上し、可読性が向上します。

高麗人参のデコレーション

@decorator などの上記のデコレーター呼び出しでは、デコレーターはデフォルトで唯一のパラメーターとして後続の関数になります。デコレータの構文を使用すると、デコレータを呼び出すときに @decorator(a) などの他のパラメータを指定できます。これにより、デコレータの作成と使用における柔軟性が向上します。

リーリー
上記の pre_str はパラメータを許可するデコレータです。これは実際には元のデコレータをカプセル化した関数であり、デコレータを返します。これは、環境パラメータを含むクロージャとして理解できます。 @pre_str('^_^') を使用して呼び出すと、Python はこのカプセル化層を検出し、パラメータをデコレータ環境に渡すことができます。この呼び出しは次と同等です:

リーリー

デコレーション

上記の例では、デコレータは関数を受け取り、関数を返すため、関数を処理する効果があります。 Python 2.6 以降、デコレータはクラスに拡張されました。デコレータはクラスを受け取ってクラスを返すことができるため、クラスを処理する効果があります。

リーリー
デコレータでは、新しいクラス newClass を返します。新しいクラスでは、元のクラスによって生成されたオブジェクト (self.wrapped) を記録し、display が呼び出された回数を記録するための新しい属性 total_display をアタッチします。同時に表示方法も変更しました。

変更を加えると、Bird クラスはディスプレイが呼び出された回数を表示できるようになります。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonリストをどのようにスライスしますか?Pythonリストをどのようにスライスしますか?May 02, 2025 am 12:14 AM

slicingapythonlistisdoneusingtheyntaxlist [start:stop:step] .hore'showitworks:1)startisthe indexofthefirstelementtoinclude.2)spotisthe indexofthefirmenttoeexclude.3)staptistheincrementbetbetinelements

Numpyアレイで実行できる一般的な操作は何ですか?Numpyアレイで実行できる一般的な操作は何ですか?May 02, 2025 am 12:09 AM

numpyallows forvariousoperationsonarrays:1)basicarithmeticlikeaddition、減算、乗算、および分割; 2)AdvancedperationssuchasmatrixMultiplication;

Pythonを使用したデータ分析では、配列はどのように使用されていますか?Pythonを使用したデータ分析では、配列はどのように使用されていますか?May 02, 2025 am 12:09 AM

Arraysinpython、特にnumpyandpandas、aresentialfordataanalysis、offeringspeedandeficiency.1)numpyarraysenable numpyarraysenable handling forlaredatasents andcomplexoperationslikemoverages.2)Pandasextendsnumpy'scapabivitieswithdataframesfortruc

リストのメモリフットプリントは、Pythonの配列のメモリフットプリントとどのように比較されますか?リストのメモリフットプリントは、Pythonの配列のメモリフットプリントとどのように比較されますか?May 02, 2025 am 12:08 AM

listsandnumpyarraysinpythonhavedifferentmemoryfootprints:listsaremoreflexiblellessmemory-efficient、whileenumpyarraysaraysareoptimizedfornumericaldata.1)listsstorereferencesto objects、with whowedaround64byteson64-bitedatigu

実行可能なPythonスクリプトを展開するとき、環境固有の構成をどのように処理しますか?実行可能なPythonスクリプトを展開するとき、環境固有の構成をどのように処理しますか?May 02, 2025 am 12:07 AM

toensurepythonscriptsbehaveCorrectlyAcrossDevelosment、staging、and Production、usetheseStrategies:1)環境variablesforsimplestetings、2)configurationfilesforcomplexsetups、and3)dynamicloadingforadaptability.eachtododododododofersuniquebentandrequiresca

Pythonアレイをどのようにスライスしますか?Pythonアレイをどのようにスライスしますか?May 01, 2025 am 12:18 AM

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

どのような状況で、リストは配列よりもパフォーマンスが向上しますか?どのような状況で、リストは配列よりもパフォーマンスが向上しますか?May 01, 2025 am 12:06 AM

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

PythonアレイをPythonリストに変換するにはどうすればよいですか?PythonアレイをPythonリストに変換するにはどうすればよいですか?May 01, 2025 am 12:05 AM

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター