python - 返回函数时decorator位置之间的差异

时间:2012-08-31 14:41:41

标签: python decorator

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

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

@decorator_function # OR HERE ?
c = a()

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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)