Python デコレータを使用して関数呼び出しをラップすることは可能ですか?
モジュールのすべての関数に対して個別にラッパーを実装したくありません。
私は次のようなものが欲しいです
def a(num):
return num
@double_the_value
a(2)
4
の実装にアクセスする必要なく戻りますa
。
グローバルラッパーは
def multiply(factor, function, *args, **kwargs):
return factor * function(*args, **kwargs)
この場合、より良い選択でしょうか?
ベストアンサー1
構文は関数またはクラスの定義と組み合わせてのみ使用できますが@decorator
、デコレータが言語機能になる前の構文では、要求どおりに実行できます。
from module import myfunc
myfunc = double_decorator(myfunc)
x = myfunc(2) # returns 4
参考文献:マーティ・アルチンの本には、デコレーターに関する非常に詳しいセクションがあります。プロパイソンApressより。