我是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,但是我觉得这个主题在这里没有得到很好的描述,请提出任何视频或好的资源,以便我能理解。
理解差异的关键是理解everything是python中的对象,包括函数。当您使用不带括号的函数名称(return wrapper
)时,您将返回实际的函数本身。使用括号时,您正在调用该函数。看下面的示例代码:
def foo(arg):
return 2
bar = foo
baz = foo()
qux = bar()
bar()
如果打印baz或qux,它将打印两个。如果打印bar
,它将为您提供引用功能的存储器地址,而不是数字。但是,如果您call函数,现在正在打印th
当返回不带()的函数时,它将返回该函数的存储位置,并且不执行该函数。
return wrapper
它将返回该函数在内存中的内存地址
return wrapper()
它将执行该功能的功能。