我正在用Python阅读此代码段:
def decorator_function(original_function):
def wrapper_function(*arg,**kwargs):
print("This line is executed before the original function")
result = original_function(*arg, **kwargs)
print("This line is executed after the original function")
print (result)
return result #Why do we need to return result from this decorator?
return wrapper_function
@decorator_function
def display_info(name, age):
print(name, age)
display_info("You", 1)
display_info("Me", 99)
装饰的函数返回无,并且无论我们是否有return result
这一行,上面的代码段都将产生相同的结果。
我想知道是否有任何原因(Pythonic?将来的代码维护?)返回此None。
该代码段是YouTube装饰器上的Python教程的一部分。
谢谢
答案 0 :(得分:1)
修饰的函数将返回None
,因为函数display_info
没有return语句,因此返回void。并且decorator_function
内部的闭包返回并输出与对原始函数display_info
的调用返回的值相同的值(装饰器的动作未触及该值),很明显它将返回一个{值{1}}。
修改:
我们为什么需要该return语句?
在这种情况下这是完全可选的,您可以确定只能将此装饰器添加到返回void或绝对不返回任何值的函数中,但是如果不是这种情况,则需要添加return语句,因为如果您不这样做, t添加return语句,您的原始函数有机会返回某些内容,将返回void。
答案 1 :(得分:1)
它返回None
,因为您的None
返回Nothing。
display_info()
这里的结果将为result = original_function(*arg, **kwargs)
。因此,当您尝试None
时,您不会获得任何帮助。
我相信您期望print(result)
中有元组("You", 1)
。