“return func”和“return func()”之间的区别

问题描述 投票:0回答:1

首先,如果这是一个重复的问题,我很抱歉。

假设我有一个简单的Python代码,名为decorator.py,这里带有装饰器:

`def decorator(func):
    def wrapper():
        print("Before function.")
        val = func()
        print("After function.")
        return val
    return wrapper() # <- please pay attention to this line`

@decorator
def hello():
    print("hello!")

@decorator
def good_bye():
    print("good_bye!")

@decorator
def thank_you():
    print("thank_you!")

@decorator
def thanks_a_lot():
    print("thanks_a_lot!")

运行代码后的结果

Before function.
hello!
After function.
Before function.
good_bye!
After function.
Before function.
thank_you!
After function.
Before function.
thanks_a_lot!
After function.
[Finished in 46ms]

这意味着 returnwrapper() 调用了我所有的函数? 在这种情况下,wrapper()和wrapper有什么区别。 感谢您的解释。

我尝试在调试模式下运行来找出答案,但仍然一无所获,我希望我能得到详细的解释

python-3.x function variables scope python-decorators
1个回答
0
投票

在这种情况下,调用wrapper()将立即执行该函数。如果您只返回包装器,那么您将返回函数本身,以便稍后可以由代码的另一部分调用

© www.soinside.com 2019 - 2024. All rights reserved.