我试图跟踪一个函数运行了多少次,并使用记忆来避免不必要地运行该函数。我不知道为什么,但似乎记忆存储了两个相同的值
def track(f):
def wrapper(arg):
wrapper.count += 1
print(arg)
return f(arg)
wrapper.count = 0
return wrapper
def memoize(f):
memo = {}
def wrapper(arg):
if arg not in memo:
memo[arg] = f(arg)
return memo[arg]
return wrapper
@track
@memoize
def fib(n):
return n if n in (0,1) else fib(n-1) + fib(n-2)
print('Result:', fib(10), '\nCount:', fib.count)
结果应该是
10
9
8
7
6
5
4
3
2
1
0
Result: 55
Count: 11
出于某种原因,它为低于9的所有产品提供了双倍的折扣。计数实际上返回19。任何帮助都将不胜感激
您需要将
memoize
移动到track
:通过向} :
track
添加附加参数,可以控制是否要使用memoize
装饰器。在这种情况下,您应该使用^{相关问题 更多 >
编程相关推荐