我试图理解以下代码(来自此网站: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
都不会重置缓存,因此它永远不会被重置。你知道吗相关问题 更多 >
编程相关推荐