def decorator_function(original_func):
def wrapper_func():
print('Run this code before the function that needs docorated')
original_func()
print('Run this code after the function that needs decorated has been called')
return wrapper_func()
def function_needing_decorated():
print('I need to be decorated')
decorator_test = decorator_function(function_needing_decorated)
我猜想这与对回报的误解有关,因为我敢肯定我不应该加上括号。我的问题是为什么它行不通?为什么它是一个NoneType,但是当我不将括号放在那里时,它不是NoneType。您对此越详细,就越好,因为我真的需要了解这一点。
答案 0 :(得分:1)
您不应在装饰器内部调用包装器-您应该返回包装器本身。
return wrapper_func
您正在做的是返回调用包装器的结果;因为该包装器本身不返回任何东西,所以装饰器本身现在什么也不是。
答案 1 :(得分:0)
在函数名称(wrapper_func()
)后面加上括号,实际上是在调用函数。
包装器函数正在评估中,其生成的值由decorator_function
返回。
wrapper_func()
没有return语句,因此它的返回值为None
,这是不可调用的。
wrapper_func
被视为变量-一流的功能。结果,它是可调用的。