Skip to main content
 首页 » 编程设计

python之next() 和 list() 中的每一个都以不同的方式迭代具有可变对象的生成器

2025年05月04日11xxx_UU

def generator(dct): 
    for i in range(3): 
        dct['a'] = i 
        yield dct 
 
g = generator({'a': None}) 
next(g) # -> {'a': 0} 
next(g) # -> {'a': 1} 
next(g) # -> {'a': 2} 
 
g = generator({'a': None}) 
list(g) # -> [{'a': 2}, {'a': 2}, {'a': 2}] 

next 如我所料迭代生成器。但是,list 意外迭代。我认为它应该返回 [{'a': 0}, {'a': 1}, {'a': 2}] 因为 next 迭代没有问题。

我想知道是什么造成了这种差异。

(我的环境:python 3.6.5,conda 4.5.4,Windows)

请您参考如下方法:

您的 generator() 生成器始终生成相同 dict 对象,只是在调用之间对其进行了修改。例如,如果您要将第一个 next(g) 更改为 x = next(g) ,然后在调用之前和之后检查 x next(g) 再次,您会看到 x 的值在调用之间发生变化,因为 generator() 总是修改并产生相同的 dict 对象。