生成器中的奇数函数关闭行为

问题描述 投票:0回答:1

我遇到了我不了解的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]]

我相信这与后期的函数闭包绑定有关,但在这种情况下我不了解确切的机制,在此不胜感激。

python function closures generator
1个回答
0
投票
有一个全局列表l,并且对ext_and_return_l的每次调用都在修改同一列表。您正在使用mapext_and_return_l延迟应用到extensions的事实并不重要。您循环所要做的就是在不同时间打印l的值(i只是一遍又一遍地重新绑定到同一列表,而不是

different列表)。

© www.soinside.com 2019 - 2024. All rights reserved.