我正在教自己如何在一些在线教程的帮助下编写代码.我遇到了"装饰者",我似乎可以理解它是如何工作的但是有些困扰我.这是给出的代码:
def decor(func):
def wrap():
print("-----------")
func()
print("-----------")
return wrap
def print_text():
print("Hello World")
decorated = decor(print_text)
decorated()
output:
-----------
Hello World
-----------
Run Code Online (Sandbox Code Playgroud)
我想要了解的事情是:
为什么你必须调用"return wrap"而不是"return wrap()"?然而,如果你不这样做,你会得到一个"TypeError:'NoneType'对象不可调用.
当我赋值装饰变量的时候.为什么我还必须使用"print_text"而不是"print_text()",如果我这样做会引发相同的TypeError?
当我使用变量"装饰".为什么我必须像函数一样调用它(最后添加()).当我用"装饰"或"打印(装饰)"来称它时,它说的是完全不同的东西?
抱歉愚蠢的问题.但我刚刚开始,所以请耐心等待.另外,请让您的回复初学者友好.谢谢