Python惰性迭代器

Python惰性迭代器,python,lazy-evaluation,Python,Lazy Evaluation,我试图理解迭代器表达式是如何以及何时被计算的。以下似乎是一个懒惰的表达: g = (i for i in range(1000) if i % 3 == i % 2) 然而,这一条在施工中失败了: g = (line.strip() for line in open('xxx', 'r') if len(line) > 10) 我没有名为“xxx”的文件。然而,既然这件事是懒惰的,为什么这么快就失败了 谢谢 伊迪:哇,我做了一个懒洋洋的 g = (line.strip() for i

我试图理解迭代器表达式是如何以及何时被计算的。以下似乎是一个懒惰的表达:

g = (i for i in range(1000) if i % 3 == i % 2)
然而,这一条在施工中失败了:

g = (line.strip() for line in open('xxx', 'r') if len(line) > 10)
我没有名为“xxx”的文件。然而,既然这件事是懒惰的,为什么这么快就失败了

谢谢

伊迪:哇,我做了一个懒洋洋的

g = (line.strip() for i in range(3) for line in open(str(i), 'r'))

调用
open()
返回的文件上的迭代是惰性的。对
open()
的调用不是。

来自:

生成器中使用的变量 表达式是在 当
next()
为生成器调用方法 对象(与 正常发电机)。但是, 最左边的
的表达式
子句立即在
当前作用域,因此出现错误
它所产生的一切都可以在任何
代码中可能存在的其他错误
处理生成器表达式

因为范围(1)中的i是范围(3)中i的三倍懒惰