装饰者的这两个位置之间有区别吗?
def a():
@decorator_function # HERE
def b():
pass
return b
@decorator_function # OR HERE ?
c = a()
答案 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)