开发者

Python lazy iterator

I am trying to understand how and when iterator expressions get evaluated. The following seems to be a lazy expression:

g = (i for i in range(1000) if i % 3 == i % 2)

This one, however fails on construction:

g = (line.strip() for line in open('xxx', 'r') if len(line) > 10)

I do not have the file named 'xxx'. However, since this thing is lazy, why is it failing so so开发者_如何学JAVAon?

Thanks.

EDI: Wow, I made a lazy one!

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


From the documentation:

Variables used in the generator expression are evaluated lazily in a separate scope when the next() method is called for the generator object (in the same fashion as for normal generators). However, the in expression of the leftmost for clause is immediately evaluated in the current scope so that an error produced by it can be seen before any other possible error in the code that handles the generator expression.


The iteration over the file returned by the call to open() is lazy. The call to open() is not.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜