gpt4 book ai didi

python - 请帮助我理解 Python 中的装饰器(Fibonnacci + memoization)

转载 作者:太空狗 更新时间:2023-10-30 02:45:16 24 4
gpt4 key购买 nike

我试图理解以下代码(来自本网站:http://jeremykun.com/2012/01/12/a-spoonful-of-python/):

def memoize(f):
cache = {}

def memoizedFunction(*args):
if args not in cache:
cache[args] = f(*args)
return cache[args]

memoizedFunction.cache = cache
return memoizedFunction

@memoize
def fib(n):
if n <= 2:
return 1
else:
return fib(n-1) + fib(n-2)

我了解拥有缓存的好处,尤其是对于计算斐波那契数之类的东西。我也明白了,现在我调用fib(4),相当于调用myfun(4),其中myfun = memoize(fib)。

我不明白的是为什么每次调用 fib 时缓存都没有重新分配给 {}。

谁能解释一下?

谢谢!

最佳答案

fib 被定义时,装饰器 memoize 只被调用一次。 cache 存储在闭包中(代表 memoize 的局部变量),每次调用 fib 都可以访问该闭包。对 fib 的每次后续调用都会导致对 memoizedFunction 的调用,而不是对 memoize 的调用,因为 fib memoizedFunction 也不会重置缓存,它永远不会被重置。

关于python - 请帮助我理解 Python 中的装饰器(Fibonnacci + memoization),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25396536/

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