Python 3.0+Итераторы и генераторыфункция
__next__
протокол итератора
Метод итератора, который вызывает next(): возвращает следующий элемент или бросает StopIteration.
Синтаксис
def __next__(self): ...
StopIteration — сигнал конца, а не ошибка: цикл for перехватывает его сам. Однажды бросив StopIteration, итератор должен бросать его и дальше. В Python 2 метод назывался next; в Python 3 — __next__, а next(it) стал встроенной функцией с необязательным значением по умолчанию.
Примеры
class Counter:
def __init__(self, limit):
self.i, self.limit = 0, limit
def __iter__(self):
return self
def __next__(self):
if self.i >= self.limit:
raise StopIteration
self.i += 1
return self.i
it = Counter(2)
print(next(it), next(it)) # → 1 2
print(next(it, 'конец')) # → конец — default вместо StopIteration
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности