假设我们有一个装饰器:
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/