作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图理解以下代码(来自本网站: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/
我试图理解以下代码(来自本网站:http://jeremykun.com/2012/01/12/a-spoonful-of-python/): def memoize(f): cache =
我在 visual studio 2015 中做了一个简单的项目来重现我在使用 Boost 1.60 的较大代码库中遇到的问题 我尝试简单地编译并运行此处找到的示例:https://github.co
我是一名优秀的程序员,十分优秀!