【发布时间】:2017-06-27 23:13:13
【问题描述】:
下面是一个记忆阶乘函数的简单示例。它工作正常,我理解基本概念,但有一个细节让我感到困惑。变量memory 驻留在哪里?为什么memoize() 执行完成后它仍然存在?它似乎不是一个全局变量,因为我不能做类似print memory 的事情。这是怎么回事?
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包装
fact -
当你在另一个函数中声明一个函数时,内部函数可以看到所有在外部函数中声明的变量。它被称为闭包。
标签: python python-2.7 memoization