Python中的函数装饰器

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

我是python的初学者,我试图用python的函数装饰器包住我的头。而且我不知道函数如何返回函数。

我的意思是解释器以什么顺序解释此功能:

def decorator(another_func):
    def wrapper():
        print('before actual function')
        return another_func()
    print('pos')
    return wrapper

这两个语句之间有什么区别:-

return wrapper

AND

return wrapper()

我正在使用Head First Python,但是我觉得这个主题在这里没有得到很好的描述,请提出任何视频或好的资源,以便我能理解。

python function return python-decorators
1个回答
0
投票

理解差异的关键是理解everything是python中的对象,包括函数。当您使用不带括号的函数名称(return wrapper)时,您将返回实际的函数本身。使用括号时,您正在调用该函数。看下面的示例代码:

def foo(arg):
    return 2

bar = foo
baz = foo()
qux = bar()
bar()

如果打印baz或qux,它将打印两个。如果打印bar,它将为您提供引用功能的存储器地址,而不是数字。但是,如果您call函数,现在正在打印th

的结果

0
投票

当返回不带()的函数时,它将返回该函数的存储位置,并且不执行该函数。

return wrapper

它将返回该函数在内存中的内存地址

return wrapper()

它将执行该功能的功能。

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