イテレータが使い果たされたときに最後にもう一度何かを返す良い方法は何でしょうか。私はフラグを使用していますが、これはかなり醜いです:
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 レコードが処理されました」を出力したいと考えています。コードの呼び出しを制御できないため、これはイテレータ内で行う必要があります。