装饰器的这两个位置之间有区别吗?
def a():
@decorator_function # HERE
def b():
pass
return b
@decorator_function # OR HERE ?
c = a()
你试过这个吗?第二个不是有效的语法。所以是的,区别在于第一个有效,第二个无效。
正如 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)