ホームページ >バックエンド開発 >Python チュートリアル >例を使用して、Pythonデコレータを理解しています
この記事は、Pythonプログラミングにおけるデコレーターの概念とそれらの最適な使用方法を理解するのに役立ちます。 Pythonデコレーターは何であるか、構文がどのように見えるか、スクリプトやフレームワークでそれらを認識する方法、および自分で適用する方法について説明します。
Pythonの関数デコレータは、構造を変更せずに装飾された関数の関数を拡張し、引数として別の関数を採用する関数にすぎません。デコレーターは別の関数をラップし、その動作を強化し、それを返します。
Pythonのデコレーターのコンセプトは、コードを乾燥させ続けるのに役立ちます(繰り返さないでください)。関数デコレータは、いくつかの重複コードスニペットを組み合わせて関数デコレータを形成できるため、コードベースの不必要な重複を避けます。 Pythonで開発を進めるにつれて、デコレーターは分析とドキュメントを支援できます。また、検証とランタイムチェックを設定するためにも重要です。
以下では、Python機能とプログラミングについての基本的な理解があると思います。少なくともPython 3.8がデバイスにインストールされています。
キーポイント
Pythonでは、すべてがオブジェクトであることを常に覚えておいてください。変数に値を割り当てるのと同じ方法で、必要に応じて機能を変数に割り当てることもできます。これは、デコレーターについて学ぶときに重要です。
<code class="language-python">def greet(): print("Hello John") greet_john = greet greet_john() >>> Hello John</code>を返すことができます
Pythonの内部関数は、外部関数から返すことができます。これは、遭遇する機能プログラミングの概念の一部です。
<code class="language-python">def greet(): def greeting_at_dawn(): print("Good morning") return greeting_at_dawn salute = greet() salute() >>> Good morning</code>
関数パラメーターを受信する関数は、高次関数と呼ばれます。
デコレータを実装することを学習し、Pythonプログラムで効果的に使用することを学習するときは、上記のポイントを念頭に置いてください。
Pythonデコレータ操作メカニズム
単純なデコレーター関数は、関数定義、デコレータ関数、および外部ラッパー関数内のネストされた関数から始まります。
デコレータを定義するときは、常に次の2つのポイントを念頭に置いてください。
上記のコードを表示すると、外部関数
(デコレーターとも呼ばれます)は、関数パラメーター<code class="language-python">def greet(): print("Hello John") greet_john = greet greet_john() >>> Hello John</code>を受信します。
は、装飾されたincrease_number
関数を含むラッパー関数です。デコレーターは別の変数に割り当てられます。これは、Pythonデコレータを使用する場合のデコレーター構文が意味するものです。ただし、デコレーターを表現する簡単な方法があります。 func
increase_by_one
@プレフィックスから始まり、その下の装飾機能を組み合わせたときに、単純なデコレーター関数を認識するのは簡単です。前の例は、次のようにリファクタリングできます
get_number
パラメーターを備えた
<code class="language-python">def greet(): def greeting_at_dawn(): print("Good morning") return greeting_at_dawn salute = greet() salute() >>> Good morning</code>デコレータ関数
場合によっては、パラメーターをデコレーターに渡す必要がある場合があります。この問題の解決策は、引数をラッパー関数に渡してから、装飾された関数に渡すことです。次の例を参照してください: パラメーターを内部またはネストされた関数に渡すことにより、装飾された関数を操作する柔軟性を提供するため、パラメーターがより強力で堅牢になります。任意の数のパラメーター(*args)またはキーワードパラメーター(** kwargs)は、装飾機能に渡すことができます。 *ARGSを使用すると、すべての位置パラメーターのコレクションが許可され、** kWargsは関数呼び出し中に必要なすべてのキーワードパラメーターに使用されます。別の簡単な例を見てみましょう:
上記の例では、 *argsは位置パラメーターをタプルとして使用して反復可能なオブジェクトを形成し、** kWargsはキーワードパラメーター辞書を形成します。
<code class="language-python">def greet_some(func): print("Good morning", end=' ') func() def say_name(): print("John") greet_some(say_name) >>> Good morning John</code>
python
<code class="language-python">def increase_number(func): def increase_by_one(): print("incrementing number by 1 ...") number_plus_one = func() + 1 return number_plus_one return increase_by_one def get_number(): return 5 get_new_number = increase_number(get_number) print(get_new_number()) >>> incrementing number by 1 ... 6</code>の複数のデコレータまたはチェーンコール
Pythonプロジェクトで関数デコレータを使用する場合、探索するいくつかのオプションがあります。別のユースケースは、デコレーター(2つ以上)を関数にリンクすることです。関数は、複数のデコレータ(複数のデコレータ)で装飾できます。これは、別のデコレータを整理することで実現できます。複数のデコレータが積み重ねられている順序に関係なく、次の例に示すのと同じ出力が得られます。
Pythonデコレータの実用的なユースケース
Pythonでデコレーターを使用する非常に人気のある方法は、時間のロガーとしてです。これにより、プログラマーは機能を実行して効率を測定するのにどれくらいの時間がかかるかを理解するのに役立ちます。
暗記は、Pythonでデコレーターを使用するもう1つのクールな方法です。計算が後で実行されると、関数への繰り返しの呼び出しの結果は、変更なしに簡単に記憶できます。デコレーターを使用して機能を記憶するだけです。
@classmethod、@staticmethod、@propertyなどの内蔵Pythonデコレーターは、PythonのOOPデコレータモードで非常に人気があります。
結論
Pythonデコレーターは、再利用可能なコードとして使用されるため、ソフトウェアエンジニアリングの乾燥原理を実施します。デコレータにリファクタリングできるPython関数の数を考えてください。この記事では、さまざまな形式のデコレーターを探ります。クラスデコレータもありますが、ここではカバーしていません。
デコレーターにより、コードを乾燥させながらソースコードを変更せずに、単純な機能、メソッド、またはクラスに機能を追加することが簡単になります。装飾機能を自分で装飾して、デコレーターのパターンをよりよく理解してみてください。
JavaScriptデコレーターに関するfaqs
JavaScriptデコレーターは、ECMAScript 2016(ES6)およびその後のバージョンのJavaScriptで導入されたデザインパターンであり、機能です。コメントまたはメタデータを適用することにより、関数、方法、またはクラスの動作を変更または強化できます。デコレーターは、AngularやMobxなどのさまざまなJavaScriptライブラリとフレームワークで一般的に使用されています。 デコレーターは通常、目的関数またはクラスをラップまたは「飾る」関数として実装されます。これらは、コアコードを変更せずに機能を追加したり、ターゲットの動作を変更したりするために使用されます。デコレーターは機能、方法、またはクラスに適用でき、 @シンボルに続いてデコレータの名前が示されます。
PythonとJavaScriptデコレーターは、機能またはメソッドの動作を変更するという概念を共有していますが、構文と使用法は異なります。 Pythonは@decorator_function Syntaxを使用し、さまざまな目的で関数とクラスに適用できます。 JavaScriptデコレーターは@Decorator Syntaxを使用し、主にクラス、方法、およびプロパティに使用されます。 Pythonデコレータはより多用途ですが、JavaScriptデコレーターはクラス中心であり、ECMAScript 2016の一部として紹介されました。
出力は、元の画像のフォーマットを維持し、入力テキストの中心的な意味を変更しません。
以上が例を使用して、Pythonデコレータを理解していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。