Тип, позволяющий реализовать поток данных и предлагающий средства для продвижения по нему.

Используется при проходе по элементам объектов, поддерживающих итерирование.

Повторяющиеся вызовы метода итератора __next__() (до +py3.0 next()) последовательно возвращают элементы из потока.

В случае исчерпания данных возникает исключение StopIteration. +py2.3 При этом последующие вызовы метода __next__() исчерпавшего себя итератора также возбуждают StopIteration.

Итераторы позволяют унифицировать операции в Питоне. Встретить их можно практически повсеместно.

my_str = 'abc'
my_iterator = iter(my_str)
my_iterator # < iterator object at 0x00A1DB50 >
my_iterator.next() # 'a'
my_iterator.next() # 'b'
my_iterator.next() # 'c'
my_iterator.next() # StopIteration

Для поддержки итерирования тип должен реализовать метод __iter__(), возвращающий объект итератора. Возможно, что объект, поддерживающий итерирование, сам явится итератором.

Внимание
Стоит помнить, как может повести себя код с несколькими итеративными прогонами. Например, контейнер (например, список) порождает новый итератор каждый раз, когда вы передаёте его в функцию iter(), либо используете его в цикле for in. При попытке проделать то же с итератором будет возвращаться всё тот же ранее исчерпавший себя итератор из предыдущего прогона. А это создаст впечатление пустого контейнера.

В сущности, признаком принадлежности к типу является следование протоколу итератора, характеризующемуся наличием реализаций двух методов:


    class Backwards:

def __init__(self, data):
self.data = data
self.index = len(data)

def __iter__(self):
return self

def __next__(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]


backwards = Backwards('some')
iter(backwards) # < Backwards instance at 0x7fceac135c68 >
for char in backwards:
print(char) # e m o s

На заметку
В стандартной библиотеке существует модуль itertools, предоставляющий функции, возвращающие итераторы, для эффективной обработки данных.
Синонимы поиска: Iterator (итератор), итератор, итерирование, итерация
На заметку
У нас есть представительство в Facebook. Ссылка в самом низу страницы.