python-返回函数时装饰器位置之间的差异
装饰师的这两个位置有区别吗python-返回函数时装饰器位置之间的差异,python,decorator,Python,Decorator,装饰师的这两个位置有区别吗 def a(): @decorator_function # HERE def b(): pass return b @decorator_function # OR HERE ? c = a() 你试过这个吗?第二个不是有效的语法。是的,区别在于第一个有效,第二个无效。正如BrenBren所说,您的代码不起作用。在任何情况下,首先,decorator语法只是语法上的糖分 @deco def func(): pass
def a():
@decorator_function # HERE
def b():
pass
return b
@decorator_function # OR HERE ?
c = a()
你试过这个吗?第二个不是有效的语法。是的,区别在于第一个有效,第二个无效。正如BrenBren所说,您的代码不起作用。在任何情况下,首先,decorator语法只是语法上的糖分
@deco
def func():
pass
相当于
def func():
pass
func = deco(func)
因此,即使假设语法正确,第一个示例也将修饰封闭函数b,而第二个示例将修饰闭包a。因此:
与
def a():
def b():
pass
a = deco(a)
def a():
def b():
pass
b = deco(b)
及
与
def a():
def b():
pass
a = deco(a)
def a():
def b():
pass
b = deco(b)
我有一种感觉,第二个是无效的,但我没有时间来测试它+1我用django试过了,但没有引起任何错误,尽管它也不起作用。将装饰器放在a之前与放在b之前是不同的。但正如@BrenBarn所说,第二个是无效的语法。我甚至不知道写这个问题时脑子里在想什么O