Iterator (итератор)
Тип, позволяющий реализовать поток данных и предлагающий средства для продвижения по нему.
Используется при проходе по элементам объектов, поддерживающих итерирование.
Повторяющиеся вызовы метода итератора __next__() (до +py3.0 next()) последовательно возвращают элементы из потока.
В случае исчерпания данных возникает исключение StopIteration. +py2.3 При этом последующие вызовы метода __next__() исчерпавшего себя итератора также возбуждают StopIteration.
Итераторы позволяют унифицировать операции в Питоне. Встретить их можно практически повсеместно.
Для поддержки итерирования тип должен реализовать метод __iter__(), возвращающий объект итератора. Возможно, что объект, поддерживающий итерирование, сам явится итератором.
В сущности, признаком принадлежности к типу является следование протоколу итератора, характеризующемуся наличием реализаций двух методов:
Повторяющиеся вызовы метода итератора __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 (итератор), итератор, итерирование, итерация
В разделе «type (тип)»:
basestring
Callable (вызываемый)
Container (контейнер)
Context Manager (менеджер контекста)
Descriptor (дескриптор)
Number (число)
object (объект)
type.__abstractmethods__
type.__base__
type.__bases__
type.__basicsize__
type.__dict__
type.__dictoffset__
type.__doc__
type.__flags__
type.__itemsize__
type.__module__
type.__mro__
type.mro
type.__name__
type.__sizeof__
unicode (юникод)
На заметку
У нас есть представительство во ВКонтакте. Ссылка в самом низу страницы.