【发布时间】:2017-10-17 02:15:09
【问题描述】:
我正在借助一些在线教程自学如何编码。我遇到过“装饰者”,我似乎可以理解它是如何工作的,但有些事情让我很困扰。这是给出的代码:
def decor(func):
def wrap():
print("-----------")
func()
print("-----------")
return wrap
def print_text():
print("Hello World")
decorated = decor(print_text)
decorated()
output:
-----------
Hello World
-----------
我想了解的事情是:
为什么必须调用“return wrap”而不是“return wrap()”?而如果你不这样做,你会得到一个“TypeError: 'NoneType' object is not callable.
当我分配修饰变量的值时。为什么我还必须使用“print_text”而不是“print_text()”,而如果我这样做会引发相同的 TypeError?
当我使用变量“decorated”时。为什么我必须像函数一样调用它(在末尾添加())。当我使用“decorated”或“print(decorated)”来称呼它时,它说的是完全不同的东西?
对不起,愚蠢的问题。但我才刚刚开始,所以请多多包涵。另外,请让您的回答对初学者友好。谢谢你
【问题讨论】:
标签: python python-3.x function decorator python-decorators