私は Python 関数デコレーターを理解しようとしていますが、これまでのところ、関数デコレーターがファースト クラス関数を使用して実行できなかったことを実行できるケースは見当たりません。
例として、logger decorator
は便利な関数デコレータの簡単な例としてよく挙げられます。
def logger(f):
def new_f():
print("Calling %s" % f.__name__)
return f()
return new_f
このデコレーターは、ログに記録したい関数と一緒に古典的に使用されます。
@logger
def fun1():
[do something]
ただし、同じ結果を得るには、 func1 を定義して logger でラップするだけで済みます。
def fun2():
[do something]
def logged_fun2():
return logger(fun2)()
呼び出しlogged_fun2
は の呼び出しに似ていfun1
ます。さらに、 でラップfun2
すると、必要に応じて、ログを記録せずlogger
にオリジナルを呼び出すことができます。fun2
ファーストクラス関数を使用してできないデコレータでできることはありますか? それとも、関数をラップするためのシンタックス シュガーの形式としてデコレータを検討する方がよいでしょうか?