Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-返回函数时装饰器位置之间的差异_Python_Decorator - Fatal编程技术网

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