【发布时间】:2016-04-22 19:29:08
【问题描述】:
下面是我在this 教程中找到的一段简单代码。
这是我发现 here 的 Closure 的一个很好的定义:“一个函数对象,它记住封闭范围内的值,无论这些范围是否仍然存在于内存中。”
我认为下面的rotate() 是一个闭包。请帮助我了解即使在它们的作用域从内存中消失后它还记住了哪些值(以及为什么它们的作用域会离开内存)?
def make_rotater(seq):
def rotate():
val = seq.pop(0)
seq.append(val)
return val
return rotate
r = make_rotater([1,2,3])
r()
# 1
r()
# 2
(更新)第 2 部分:为什么下面的(无闭包)代码不起作用?
def make_rotater(seq):
val = seq.pop(0)
seq.append(val)
return val
r = make_rotater([1,2,3])
r()
# File "<stdin>", line 1, in <module>
# TypeError: 'int' object is not callable
【问题讨论】: