Что было бы хорошим способом вернуть что-то из итератора в последний раз, когда он исчерпан. Я использую флаг, но это довольно некрасиво:Возврат с итератора, а затем сброс 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__' объектом объекта самой функцией генератора, в тех случаях, когда вы не можете или не хотите напрямую использовать генератор. –
Спасибо, «урожай» - это то, что я пропустил. – georg