-1

デコレータのこれら2つの場所に違いはありますか?

def a():
    @decorator_function # HERE
    def b():
        pass
    return b

@decorator_function # OR HERE ?
c = a()
4

2 に答える 2

5

あなたもこれを試しましたか?2つ目は有効な構文ではありません。そうです、違いは、最初のものは有効で、2番目のものは無効であるということです。

于 2012-08-31T14:43:04.323 に答える
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)
于 2012-08-31T14:56:37.147 に答える