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

6
задан twasbrillig 23 November 2014 в 10:29
поделиться