以下示例中list()
和dict()
之间区别的原因是什么:
glist = (x for x in (1, 2, 3))
print(list(glist))
print(list(glist))
gdict = {x:y for x,y in ((1,11), (2,22), (3,33))}
print(dict(gdict))
print(dict(gdict))
>>>
[1, 2, 3]
[]
{1: 11, 2: 22, 3: 33}
{1: 11, 2: 22, 3: 33}
答案 0 :(得分:3)
区别在于只有第一个表达式glist
是生成器,第二个表达式gdict
是dict
- 理解。如果你改变[x for x in (1, 2, 3)]
的第一个,那么这两个只是等价的。
立即评估理解。
答案 1 :(得分:1)
这些是完全不同的东西。第一个表达式是一个生成器:在第一次迭代之后,它已经耗尽,因此进一步的迭代是空的。
第二个是字典理解:就像列表理解一样,它每次都返回一个新对象,在本例中是一个dict。所以每次迭代都是在一个新的字典上。
答案 2 :(得分:0)
一个例子可以更好地理解这一点。
调用next
的{{1}}方法来生成每个元素。
generator
现在在我们的生成器对象上调用>>> a = (i for i in range(4))
>>> a.next()
0
>>> a.next()
1
>>> a.next()
2
>>> a.next()
3
>>> a.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
>>> list(a)
[]
函数。
list
现在在列表理解上调用>>> a = (i for i in range(4))
>>> list(a)
[0, 1, 2, 3]
>>> list(a)
[]
。
list
因此列表理解和字典理解是相似的,这导致实际数据不像生成元素的生成器。