Python装修师吐槽None

Python Decorator is spitting out None

我正在 python 中学习一些新主题,我终于开始学习装饰器,这看起来很酷,除了有一个主要问题。下面是我的代码 运行:

def new_dec(ori_func):
    def WrapFunc():
        print("First Line")
        ori_func()
        print("Second line")
    return WrapFunc

def new_func():
    print("This is the new function")

ThisFunc = new_dec(new_func)
print(ThisFunc())

但是,当执行此代码时,它会输出:

First Line
This is the new function
Second line
None

而且我不记得添加了None语句,这可能是添加的类型变量吗?为什么会发生这种情况,如何解决。

您有四个打印语句。所以打印了四件事。默认情况下函数 returns None:

>>> def f(): pass
>>> print(f())
None

检查如果你定义会发生什么:

def new_dec(ori_func):
    def WrapFunc():
        print("First Line")
        ori_func()
        print("Second line")
        return "Fourth Line"
    return WrapFunc

或者您可以删除第四个打印:

# print(ThisFunc())
ThisFunc()

默认情况下,函数 returns None。您只需调用该函数即可获得您期望的结果。

def new_dec(ori_func):
    def WrapFunc():
        print("First Line")
        ori_func()
        print("Second line")
    return WrapFunc

def new_func():
    print("This is the new function")

ThisFunc = new_dec(new_func)
ThisFunc() # get rid of the print statement