以下是一个简单的无参数、被装饰函数无返回值的简单Python装饰器例子:
def log(func) :
def wrapper():
print('time:')
func()
return wrapper()
@log
def show():
print('2019')
show()
运行结果:
TypeError: ‘NoneType’ object is not callable
错误原因:
装饰器中不应return wrapper() ,而应该是return wrapper,即返回的应该是函数调用而不是函数的运行结果。
正确代码:
def log(func) :
def wrapper():
print('time:')
func()
return wrapper
@log
def show():
print('2019')
show()
运行结果:
time:
2019
本文深入探讨了Python装饰器的正确使用方法,通过一个常见错误示例,解释了为什么装饰器内部不应返回函数调用,而是应该返回函数本身。正确代码展示了如何避免这一常见陷阱。
750

被折叠的 条评论
为什么被折叠?



