python压缩生成器出现意外行为



最近我在python 中遇到了一些来自理解生成器的奇怪行为

我的代码:

with open('test.txt') as file:
lines = (line for line in file.read().splitlines())
for line in lines:
print(line)
for line in lines:
print(line)

然而,我只得到了一个:,而不是对同一文件内容进行两次迭代

row1
row2
row3
...

我所期望的:

row1
row2
row3
...
row1
row2
row3
...

我在其他论坛上找不到这个问题的解决方案,所以如果你知道答案,我将感谢你的帮助:-(

编辑:发布这个问题是因为我对发电机的工作方式缺乏了解。我确信,一旦我在发电机上完成一个循环,我就可以随心所欲地做另一个循环。我对这个问题深表歉意。

您应该使用列表理解而不是生成器,将括号替换为方括号,如

with open('test.txt') as file:
lines = [line for line in file.read().splitlines()] # parenthesis replaced with square brackets
for line in lines:
print(line)
for line in lines:
print(line)

最新更新