Python 関数呼び出しを装飾する 質問する

Python 関数呼び出しを装飾する 質問する

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より。

おすすめ記事