У меня есть следующий фрагмент кода о функциональных декораторах , где я хотел инициализировать переменную wrapper.calls
равной 0 со второго раза, когда я вызываю fib()
, зная, что при первом запуске это дает правильный ответ и после, он ведет себя как суммирование предыдущих результатов. У меня вопрос, как это исправить при смене только декоратора-профилировщика, пожалуйста?
Вот мой код:
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