传入函数调用时,Python装饰器会反向打印吗?

时间:2017-05-17 17:33:43

标签: python function decorator wrapper

还在学习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

0 个答案:

没有答案