-
デコレータ
デコレータは、別の関数を受け取り、明示的に変更せずに後者の関数の動作を拡張する関数です。
-
機能
関数は、指定された引数に基づいて値を返します。
-
ファーストクラスのオブジェクト
Pythonでは、関数はファーストクラスのオブジェクトです。
これは、他のオブジェクト(sting、int、float、listなど)と同じように、関数を渡して引数として使用できることを意味します。
-
内部機能
内部関数は、他の関数の内部で定義された関数です。
-
関数から関数を返す
Pythonでは、関数を戻り値として使用することもできます。
括弧なしのreturn関数。これは、返された関数への参照を返すことを意味します。
-
シンプルなデコレータ
def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper def say_whee(): print("Whee!") say_whee = my_decorator(say_whee)
デコレータは関数をラップし、その動作を変更します。
-
シンタックスシュガー
上記のフォーマットは少し不格好です。
Pythonでは
@
、「パイ」構文と呼ばれることもあるシンボルを使用して、より簡単な方法でデコレータを使用できます。次の例は、最初のデコレータの例とまったく同じことを行います。
def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @my_decorator def say_whee(): print('Whee!')
-
デコレータの再利用
デコレータは単なる通常のPython関数です。
他のファイルにインポートすることができます。
def do_twice(func): def wrapper_do_twice(*args, **kwargs): # 输入参数 func(*args, **kwargs) return func(*args, **kwargs) # return values return wrapper_do_twice
内省による情報の保持について:
import functools def do_twice(func): @functools.wraps(func) # def wrapper_do_twice(*args, **kwargs): func(*args, **kwargs) return func(*args, **kwargs) return wrapper_do_twice
-
ファンシーデコレータ
-
クラスを飾る
Pythonでインを内蔵しているデコレータがあり
@classmethod
、@staticmethod
と@property
。デコレータは、クラスinsdieメソッドを定義するために使用されています。
@classmethod
@staticmethod
@property
デコレータは、クラス属性のgetterとsetterをカスタマイズするために使用されます。 -
LiaoXuefengから
デコレータは本質的に、関数を返す高次の関数です。
-
参考文献
pythonのデコレータの詳細な理解
おすすめ
転載: blog.csdn.net/The_Time_Runner/article/details/109171356
おすすめ
ランキング