デコレータのこれら2つの場所に違いはありますか?
def a():
@decorator_function # HERE
def b():
pass
return b
@decorator_function # OR HERE ?
c = a()
あなたもこれを試しましたか?2つ目は有効な構文ではありません。そうです、違いは、最初のものは有効で、2番目のものは無効であるということです。
BrenBrenが言ったように、あなたのコードは機能しません。いずれにせよ、最初に、デコレータ構文は単なる構文上の糖衣です。
@deco
def func():
pass
と同等です
def func():
pass
func = deco(func)
したがって、正しい構文を想定していても、最初の例は囲まれた関数b()
を装飾し、2番目の例はクロージャーを装飾しa()
ます。それで:
@deco
def a():
def b():
pass
と同じです
def a():
def b():
pass
a = deco(a)
と
def a():
@deco
def b():
pass
と同じです
def a():
def b():
pass
b = deco(b)