def fib1(n, cache = {}):
if n <= 1:
return 1
if n not in cache:
cache[n] = fib1(n-1) + fib1(n-2)
return cache[n]
def fib2(n, cache = {}):
if n <= 1:
return 1
if n not in cache:
cache[n] = fib2(n-1, cache) + fib2(n-2, cache)
return cache[n]
为什么当我没有像第二个函数fib2中那样将缓存作为参数传递时,fib1仍然有效?
答案 0 :(得分:1)
详细说明我上面的评论......
在第一个版本中,cache
使用空dict初始化一次,后续函数调用访问此单个dict并对其进行修改。
在第二个版本中,您传递了cache
字典,但它仍然是同一个字典。
在这两个版本中,整个程序中只有一个cache
dict。即使您将该功能调用100次,也只需一次。可变的默认参数是&#34; sticky&#34;像那样,大部分时间都是坏主意。