-1

装饰器的这两个位置之间有区别吗?

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

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

2 回答 2

5

你试过这个吗?第二个不是有效的语法。所以是的,区别在于第一个有效,第二个无效。

于 2012-08-31T14:43:04.323 回答
2

正如 BrenBren 所说,您的代码不起作用。无论如何,首先,装饰器语法只是语法糖。

@deco
def func():
    pass

相当于

def func():
    pass
func = deco(func)

所以即使假设语法正确,第一个例子是装饰封闭的函数b(),而第二个例子是装饰闭包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 回答