【发布时间】:2019-08-02 09:44:10
【问题描述】:
我有以下关于功能装饰器的代码块,我想在第二次调用fib() 时将变量wrapper.calls 初始化为0,因为我知道在第一次运行时它会给出正确答案之后,它的行为就像对以前的输出求和一样。我的问题是如何通过仅更改装饰器分析器来解决此问题?
这是我的代码:
from functools import wraps
import time
def profiler(func):
@wraps(func)
def wrapper(*args, **kwargs):
wrapper.calls += 1
return func(*args, **kwargs)
wrapper.calls = 0
return wrapper
@profiler
def fib(n):
if n == 0:
return 0
if n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
fib(1)
print(fib.calls)
fib(2)
print(fib.calls)
此程序执行后的输出:
1
4
预期输出
1
3
【问题讨论】:
标签: python-3.x python-decorators