是的,它是len(list(file1)). 观察:
>>> myiter = (i for i in range(3))
>>> len(list(myiter))
3
>>> myiter.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
和:
>>> myiter = (i for i in range(3))
>>> myiter.next()
0
>>> myiter.next()
1
>>> myiter.next()
2
>>> myiter.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
不是len()哪个导致生成器到达末尾,而是它list()通过从迭代器中一个一个地获取一个项目将生成器变成一个列表,导致生成器被耗尽(即完成)。
为避免这种情况,只需从生成器中列出一个列表:
>>> myiter = (i for i in range(3))
>>> temp = list(myiter)
>>> len(temp)
3
>>> temp
[0, 1, 2]
如果您再次需要它作为迭代器,您可以随时调用iter()