我正在尝试理解以下代码(来自这个网站: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)
Run Code Online (Sandbox Code Playgroud)
我理解拥有缓存的好处,特别是计算Fibonacci数字之类的东西.我也明白,现在当我调用fib(4)时,它相当于调用myfun(4),其中myfun = memoize(fib).
我不明白为什么每次调用fib都不会将缓存重新分配给{}.
谁能解释一下?
谢谢!
装饰器memoize只在fib被定义时被调用一次.将cache存储在一个封闭(代表的局部变量memoize),它每次调用fib访问.每次后续调用都会fib导致调用memoizedFunction,而不是调用memoize,既然既没有fib也没有memoizedFunction重置缓存,它永远不会被重置.