2010-02-12 76 views
5

我想了解如何以及何時迭代器表達式得到評估。下面似乎是一個懶惰的表現:Python懶惰迭代器

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」。但是,由於這件事很懶,爲什麼它很快就失敗了?

謝謝。 EDI:哇,我做了一個懶惰的!

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

對於我在範圍內(1)的惰性是我在範圍(3)中的3倍, – Jimmy 2010-02-12 04:31:34

回答

4

documentation:在發電機 表達式中使用

變量在 單獨範圍懶惰地評估當next() 方法被稱爲用於發電機 對象(以相同的方式作爲用於 正常發電機)。然而,最左邊的for 子句的in 表達在 電流範圍立即評估,使得由它產生的誤差 可以之前在 處理髮電機表達式的代碼的任何其它 可能的錯誤可以看出。

6

對呼叫返回的文件迭代到open()是惰性的。撥打open()不是。