gpt4 book ai didi

python-3.x - 使用 python 装饰器调用递归函数的次数

转载 作者:行者123 更新时间:2023-12-03 12:51:26 26 4
gpt4 key购买 nike

我有以下关于 的代码块功能装饰我想在哪里初始化变量 wrapper.calls从我第二次调用 fib() 开始为 0知道在第一次运行时它给出了正确的答案,之后,它的行为就像对以前的输出求和一样。我的问题是如何通过仅更 retrofit 饰器分析器来解决此问题,好吗?

这是我的代码:

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

最佳答案

def profiler(func):

calls = 0

@wraps(func)
def wrapper(*args, **kwargs):
nonlocal calls
if not calls:
wrapper.calls = 0

calls += 1
result = func(*args, **kwargs)
calls -= 1
wrapper.calls += 1

return result
return wrapper

关于python-3.x - 使用 python 装饰器调用递归函数的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55112675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com