python理解生成器的意外行为

时间:2021-06-11 10:28:56

标签: python list-comprehension generator

最近我在 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
...

我无法在其他论坛上找到此问题的解决方案,因此如果您知道答案,我将不胜感激 :-)

编辑:发布这个问题是因为我对生成器的工作原理缺乏了解。我确信,一旦我完成了一个生成器的循环,我就可以根据需要多次执行另一个循环。对于这个问题,我深感抱歉。

1 个答案:

答案 0 :(得分:0)

你应该使用列表推导而不是生成器,用方括号替换括号,比如

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)
相关问题