我在学习装饰师,我有个问题。在这个装饰函数call_counter中,定义并返回另一个函数,并“替换”作为参数传入的函数func。
def call_counter(func):
def helper(*args, **kwargs):
helper.calls += 1
return func(*args, **kwargs)
helper.calls = 0
return helper完成此操作后,我们可以通过以下方式从任何函数外部访问helper.calls:
@call_counter
def addition(x, y):
return x + y
print(addition.calls)
addition(1, 2)
print(addition.calls)产出:
0
1我的问题是,在调用和退出helper.calls函数之后,call_counter变量如何在内存中存在?据我所知,helper.calls存在于call_counter的内存中,但如果在call_counter执行完成后可以访问变量,这似乎不太可能。
发布于 2017-08-20 16:03:34
calls是helper的一个属性,它将一直存活到helper死亡,而helper不会死,因为正如您所说的,它将以addition的名称存在。
发布于 2017-08-20 16:17:26
call_counter函数每次使用名称helper调用它时都会创建一个新的对象(函数)。call_counter函数将返回新创建的对象。当装潢师工作的时候,基本上是这样的:
def addition(x,y):
return x+y
addition = call_counter(addition)因此,现在返回的对象(以前命名为helper的函数)存储在addition下。
https://stackoverflow.com/questions/45784105
复制相似问题