Каким будет хороший способ вернуть что-то из итератора в последний раз, когда он исчерпан? . Я использую флаг, но это довольно уродливо:
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 записей». У меня нет контроля над вызывающим кодом, поэтому это нужно делать внутри моего итератора.