Python 为什么';下一个函数是否在没有事先赋值的情况下在迭代器对象上工作?
在Python 3.7中,如果我有:Python 为什么';下一个函数是否在没有事先赋值的情况下在迭代器对象上工作?,python,python-3.7,Python,Python 3.7,在Python 3.7中,如果我有: >>> d1 = {2:5, 6:4, 7:8} >>> d2 = {50:31, 51:32, 52: 36} 并应用下一个函数: >>> next(zip(d1, d2)) (2, 50) >>> next(zip(d1, d2)) (2, 50) >>> next(zip(d1, d2)) (2, 50) ....... 如果我做作业 g = zip(d1,
>>> d1 = {2:5, 6:4, 7:8}
>>> d2 = {50:31, 51:32, 52: 36}
并应用下一个函数:
>>> next(zip(d1, d2))
(2, 50)
>>> next(zip(d1, d2))
(2, 50)
>>> next(zip(d1, d2))
(2, 50)
.......
如果我做作业
g = zip(d1, d2)
应用下一个函数,它会给出正确的结果:
>>> next(g)
(2, 50)
>>> next(g)
(6, 51)
>>> next(g)
(7, 52)
我想知道为什么下一个函数在没有变量赋值的情况下不能在生成器对象上工作。您正在创建新的迭代器实例,这就是为什么 这是因为如果您这样调用迭代器,您将通过
zip
创建迭代器的新实例,因此每次在全新迭代器上调用next
时,它都会给您迭代器中的第一个元素
正如您正确指出的,您需要将zip分配给一个变量,然后调用该变量的下一步
d1 = {2:5, 6:4, 7:8}
d2 = {50: 31, 51: 32, 52: 36}
it = zip(d1, d2)
print(next(it))
print(next(it))
print(next(it))
这种情况下的输出将是
(2, 50)
(6, 51)
(7, 52)
如果您真的不想为zip
使用变量,只需使用列表理解即可
d1 = {2:5, 6:4, 7:8}
d2 = {50: 31, 51: 32, 52: 36}
values = [item for item in zip(d1, d2)]
print(values)
这些值将是
[(2, 50), (6, 51), (7, 52)]
它确实有效。但是您每次都通过重新压缩字典来创建一个全新的迭代器,所以您总是可以看到第一个值。