1
我的理解是python生成器表达式返回延迟评估的解析,并且在字典更改时更新字典中的对象。字典视图上的Python生成器似乎没有被懒惰地评估
考虑下面的代码(Python的2.7.6的Windows):
d = {}
gt_three = (x for x in d.viewkeys() if x > 3)
print list(gt_three)
d[1] = 'one'
d[4] = 'four'
print list(gt_three)
我所期望的输出如下:
[]
[4]
相反,我收到:
[]
[]
如果我在添加到字典后重新创建生成器,或者打印视图本身,我会看到预期的输出。 我对发电机了解不多?我对Python非常陌生。
我现在看到了区别谢谢,是实现我正在寻找一个生成器函数而不是表达式/理解的方式? – Dragos
@Dragos:这取决于。我可能会使用'[x for x in d if x> 3]'并创建一个新列表,只要您需要一个反映新状态的地方,但这是一个猜测。你可以用一个'__iter__'方法来定义一个类,这个方法被实现为一个生成器函数,在这种情况下,每次迭代对象都会得到一个新的迭代器。 – user2357112