相关疑难解决方法(0)

python中奇怪的闭包行为

我有一个简单的代码:

def get():
    return [lambda: i for i in [1, 2, 3]]

for f in get():
    print(f())
Run Code Online (Sandbox Code Playgroud)

正如我的python知识预期的那样,输出为3 - 整个列表将包含最后一个值i.但这是如何在内部工作的?

AFAIK,python变量只是对象的引用,因此第一个闭包必须包含对象的第一个i引用 - 这个对象肯定是1,而不是3 O_O.如何发生python闭包包含变量本身而不是对象这个变量引用?它是否将变量名称保存为纯文本,某些"变量引用"还是什么?

python closures

13
推荐指数
2
解决办法
439
查看次数

标签 统计

closures ×1

python ×1