1

我的理解是,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很陌生。

4

1 回答 1

0

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

于 2014-02-17T11:29:26.470 回答