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的三倍懒惰