【发布时间】:2017-12-11 14:07:08
【问题描述】:
我正在刷新我对一些我还没有得到的 python 特性的记忆,我正在向this python tutorial 学习,并且有一个我不完全理解的例子。这是关于一个装饰器计算对函数的调用,这里是代码:
def call_counter(func):
def helper(x):
helper.calls += 1
return func(x)
helper.calls = 0
return helper
@call_counter
def succ(x):
return x + 1
if __name__ == '__main__':
print(succ.calls)
for i in range(10):
print(succ(i))
print(succ.calls)
我在这里不明白的是,为什么我们要增加函数包装器的调用 (helper.calls += 1) 而不是函数调用本身,为什么它实际上有效?
【问题讨论】:
-
@call_counter succ==succ = call_counter(succ) = helper