我有以下简单的代码:
def get():
return [lambda: i for i in [1, 2, 3]]
for f in get():
print(f())
从我的python知识来看,输出结果是3 - 整个列表将包含i
的最后一个值。但这是如何在内部工作的呢?
据我所知,Python变量只是对象的引用,因此第一个闭包必须首先包含对象i
的引用 - 而这个对象明显是1而不是3 O_O。为什么Python闭包会封闭变量本身而不是这个变量引用的对象?它保存变量名作为纯文本、某种“对变量的引用”还是其他什么?