當迭代器耗盡時,最後一次從迭代器返回某些東西的好方法是什麼?我使用的一個標誌,但是這是比較難看:從迭代器中返回,然後拋出StopIteration
class Example():
def __iter__(self):
self.lst = [1,2,3]
self.stop = False # <-- ugly
return self
def next(self):
if self.stop: # <-- ugly
raise StopIteration
if len(self.lst) == 0:
self.stop = True
return "one last time"
return self.lst.pop()
背景:我取字符串從外部來源未知量,並進一步發下來給調用者。當進程結束時,我想發出一個字符串「x記錄處理」。我無法控制調用代碼,所以這必須在我的迭代器中完成。
請記住,如果您無法或不想直接使用生成器,您可以將對象的__iter__方法本身作爲生成器函數。 – 2012-02-22 19:01:39
謝謝,「收益」是我錯過的。 – georg 2012-02-22 19:18:24