还在学习Python,今天当我看到一些我不理解的行为时,我正在搞乱IDLE中的装饰器。我定义了一个简单的装饰器,当装饰我的测试功能时,它都按预期工作:
>>> def decorator_function(original_function):
def wrapper_function():
print("wrapping")
return original_function()
return wrapper_function
>>> def test_function():
print("wrapped function")
>>> decorated_test = decorator_function(test_function)
>>> decorated_test()
wrapping
wrapped function
然后我尝试删除对original_function
的调用并将调用传递给test_function
,奇怪的是(对我而言)这颠倒了打印语句:
>>> def decorator_function(original_function):
def wrapper_function():
print("wrapping")
return original_function
return wrapper_function
>>> def test_function():
print("wrapped function")
>>> decorated_test = decorator_function(test_function())
>>> decorated_test()
wrapped function
wrapping
我试图了解它,但无法弄清楚究竟发生了什么。如果有的话,我希望它只会"wrapping"
打test_function
return None
。