我遇到了我不了解的python行为。
这里是一个简单的演示代码:
l = []
def ext_and_return_l(ext):
l.append(ext)
return l
extensions = [1, 2, 3, 4]
gen = map(ext_and_return_l, extensions)
现在说我想查看生成器的条款,我有选择。
首先循环,给我我所期望的:
for i in gen:
print(i)
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
使用列表,再次运行演示代码后:
list(gen)
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
我相信这与后期的函数闭包绑定有关,但在这种情况下我不了解确切的机制,在此不胜感激。
l
,并且对ext_and_return_l
的每次调用都在修改同一列表。您正在使用map
将ext_and_return_l
延迟应用到extensions
的事实并不重要。您循环所要做的就是在不同时间打印l
的值(i
只是一遍又一遍地重新绑定到同一列表,而不是different列表)。