Python デコレーターは、元の関数の機能を拡張するために使用される関数で、元の関数名 (またはクラス名) を変更せずに、関数に新しい関数を追加することを目的としています。デコレータは本質的にクロージャであり、クロージャはデコレータのコアです。
定義
(推奨チュートリアル: python チュートリアル)
python デコレータ (関数型デコレータ)は、元の関数の機能を拡張するために使用される関数で、元の関数名(またはクラス名)を変更せずに、その関数に新しい関数を追加することを目的としています。
この関数の特徴は、戻り値も関数であるということです。この関数は、「オリジナル」の関数を埋め込んだ関数です。実は、デコレータ これは関数をパラメータとして受け取り、関数の代替バージョンを返すクロージャです。クロージャはデコレータの中核です。
クロージャの特徴を簡単に説明します:
関数オブジェクトから返される関数。この関数オブジェクトが実行されると、非関数内の変数値に依存します。このとき、関数から返される実際の内容は次のとおりです:
1 . 関数オブジェクト;
2. 関数オブジェクトが使用する必要がある外部変数 変数と変数値;
上記はクロージャです。クロージャは関数内でネストされており、関数を返す必要があります。外部変数をクロージャとして呼び出す関数オブジェクト。関数の呼び出しの前後にログを自動的に出力するなど、関数を now() 関数に追加しますが、元の now() の定義を変更したくないため、デコレータが役に立ちます。 #本質的に、デコレーターは関数を返す高階関数です。そのため、ログを出力できる関数を定義する必要があります。デコレーター
Python2.4 以降、識別子 @ を使用して、デコレータを関数に追加します。関数の定義の前に @ とデコレータの名前を追加するだけです。
コード:
#encoding=utf-8 import time def now(): print "current time is %s" %time.strftime("%Y-%m-%d %H-%M-%S") res=now res()
結果:
以上がPython デコレータの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。