字典视图上的Python生成器似乎没有被懒惰地评估

时间:2014-02-17 11:27:32

标签: generator-expression

我的理解是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很新。

1 个答案:

答案 0 :(得分:0)

生成器表达式返回一个迭代器,您只能迭代一次。尝试在第一次之后迭代迭代器将始终将其视为空。