学ぶ Pythonデコレータ このチュートリアルでは。
デコレータを使用して既存の関数に機能を追加します。 これはメタプログラミングと呼ばれます。
関数は関数を引数として取ることができます(飾る機能)そして、拡張子の有無にかかわらず同じ関数を返します。
機能の拡張は非常に便利な場合があります。この記事の後半で実際の例を示します。
関連コース: 完全なPythonプログラミングコースと演習
関数はオブジェクトです
Pythonでは、関数を含むすべてがオブジェクトです。 これは、関数を渡して返すことができることを意味します。 あなたがそれを見るとき、それは最初は奇妙に見えるかもしれません:
1 |
def hello(): |
message()またはhello()のいずれかのメソッドを呼び出すと、同じ出力になります。 これは、同じオブジェクトを参照しているためです。
それでは、デコレータを続けましょう。
デコレータ
例
デコレータは関数を受け取り、それを拡張して戻ります。 はい、 関数は関数を返すことができます。
1 |
def hello(func): |
上記の例では、hello()はデコレータです。
声明の中で
関数name()は、関数hello()によって装飾されています。関数を他の関数でラップします。
例2
関数は、それらをラップすることによって拡張できます。
1 |
def who(): |
関数who()はdisplay()によって装飾されます。
シンタックスシュガー
デコレータは一般的であり、簡略化できます。 まったく同じことをしますが、コードはよりクリーンです。
Pythonは、デコレータの使用を簡素化できます。 @記号。
1 |
|
これはまったく同じように出力されますが、コードを書くためのよりクリーンな方法です。
私と一緒にいて。 呼び出し
簡単な書き方です。どちらの場合も、デコレータを関数に適用します。
引数
パラメータはデコレータで使用できます。 このように、合計a + bを出力する関数がある場合
1 |
def sumab(a,b): |
デコレータ関数でラップできます。
以下の例は、その方法を示しています。
1 |
def pretty_sumab(func): |
関数sumabは、関数pretty_sumabによってラップされます。 これは、その上に@記号で示されます。
関数sumabを呼び出し、関数sumabとpretty_sumabの両方のロジックがパラメーターを使用して実行されていることを確認します。
実世界の例
ユースケース:時間測定
デコレータを使用して、関数の実行にかかる時間を測定できます。
スリープする単純な関数を定義すると、
1 |
def myFunction(n): |
次に、行@measure_timeを追加するだけで、所要時間を測定できます。
以下の例:
1 |
import time |
これにより、関数myFunction()の実行にかかった時間が出力されます。 すばらしいのは、1行のコードを追加することです。 @measure_time これで、プログラムの実行時間を測定できます。
ユースケース:Webアプリ
Webアプリのユースケースを見てみましょう。 FlaskでWebアプリを構築するときは、常にURLルートを記述します。
すべてのルートは、Webアプリの特定のページです。
ページ/ aboutを開くと、about_page()メソッドが呼び出される場合があります。
1 |
|
この場合、装飾に@記号を使用します。
Hope this helps!
Source link