Python デコレータの詳細な紹介

王林
王林オリジナル
2020-07-08 13:40:092811ブラウズ

Python デコレーターは、元の関数の機能を拡張するために使用される関数で、元の関数名 (またはクラス名) を変更せずに、関数に新しい関数を追加することを目的としています。デコレータは本質的にクロージャであり、クロージャはデコレータのコアです。

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 サイトの他の関連記事を参照してください。

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