【问题标题】:python - Difference between decorator location when returning a function [closed]python - 返回函数时装饰器位置之间的区别[关闭]
【发布时间】:2012-08-31 14:41:40
【问题描述】:

这两个装饰器的位置有区别吗?

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

@decorator_function # OR HERE ?
c = a()

【问题讨论】:

  • 将装饰器放在a() 之前与b() 之前有的区别。但就像@BrenBarn 所说,第二个语法无效。
  • 写这个问题时,我什至无法弄清楚我的想法。 :O

标签: python decorator


【解决方案1】:

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

【讨论】:

  • 我感觉第二个无效,但我没有时间测试它。 (+1)
  • 我用 django 尝试过,但它没有引发任何错误,尽管它不能正常工作。
【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 2014-06-27
    • 1970-01-01
    • 2011-06-06
    • 2021-09-23
    • 1970-01-01
    • 2020-12-04
    • 2018-09-01
    • 2021-07-19
    相关资源
    最近更新 更多