下面是一个memoized阶乘函数的简单例子。它工作正常,我了解基本概念,但有一个细节让我感到困惑。变量memory
在哪里?为什么在memoize()
完成执行后仍然存在?它似乎不是一个全球变量,因为我不能做类似print memory
的事情。这里发生了什么?备忘python函数的缓存在哪里存在?
def memoize(f):
memory = {}
def memoized(*args):
if args not in memory:
memory[args] = f(*args)
return memory[args]
return memoized
@memoize
def fact(n):
if n <= 1:
return 1
return n * fact(n - 1)
print fact(10)
它存在于[closure](https://en.wikipedia.org/wiki/Closure_ (computer_programming))包装'fact' –
当你在另一个函数中声明一个函数时,内部函数可以看到在外部函数中声明的所有变量。它被称为封闭。 – Gabriel