假设我们有一个装饰器:

def decor(function):
    def result():
        printf('decorated')
        return function()
    return result

以下代码有什么区别:
@decor
def my_foo():
    print('my_foo')

和:
def my_foo():
    print('my_foo')
my_foo = decor(my_foo)

最佳答案

您的最后一段代码几乎是装饰器的定义。唯一的区别是,在第一种情况下,名称 decor 在函数定义之前计算,而在第二种情况下,它在函数定义之后计算。这仅在执行函数定义更改名称所指的内容时才会有所不同。

无意义的例子:

def decor(function):
    def result():
        printf('decorated')
        return function()
    return result

def plonk():
    global decor
    decor = lambda x: x
    return None

现在
@decor
def my_foo(foo=plonk()):
    print('my_foo')

不同于
def my_foo(foo=plonk()):
    print('my_foo')
my_foo = decor(my_foo)

关于python - 使用装饰器和显式调用它有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8772694/

10-12 22:18