小编Sha*_*cis的帖子

装饰器,调用函数没有括号?

我正在教自己如何在一些在线教程的帮助下编写代码.我遇到了"装饰者",我似乎可以理解它是如何工作的但是有些困扰我.这是给出的代码:

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?

  • 当我使用变量"装饰".为什么我必须像函数一样调用它(最后添加()).当我用"装饰"或"打印(装饰)"来称它时,它说的是完全不同的东西?

抱歉愚蠢的问题.但我刚刚开始,所以请耐心等待.另外,请让您的回复初学者友好.谢谢

python function decorator python-3.x python-decorators

2
推荐指数
1
解决办法
484
查看次数