Введение
Примеры
Итератор против Итерируемого против Генератора
Итерацию является объектом , который может вернуть итератор. Любой объект с состоянием , которое имеет __iter__
метод и возвращает итератор является итерацией. Он также может быть объектом без государства , которое реализует __getitem__
метод. - Метод может принимать индексы (начиная с нуля) и не поднимать IndexError
когда индексы больше не действительны.
Пайтона str
класс является примером __getitem__
Iterable.
Итератор это объект , который производит следующее значение в последовательности при вызове next(*object*)
на какой - либо объект. Кроме того, любой объект с __next__
методой является итератором. Итератора поднимает StopIteration
после исчерпания итератора и не может быть повторно использована в этой точке.
Итерируемые классы:
Iterable классы определяют __iter__
и __next__
метод. Пример повторяемого класса:
class MyIterable:
def __iter__(self):
return self
def __next__(self):
#code
#Classic iterable object in older versions of python, __getitem__ is still supported...
class MySequence:
def __getitem__(self, index):
if (condition):
raise IndexError
return (item)
#Can produce a plain `iterator` instance by using iter(MySequence())
Попытка создать экземпляр абстрактного класса из collections
модулей , чтобы лучше видеть.
Пример:
import collections
collections.Iterator()
#File "<stdin>", line 1, in <module>
#TypeError: Can't instantiate abstract class Iterator with abstract #methods __next__
TypeError: Не могу создать экземпляр абстрактного класса Iterator с абстрактными методами __next__
Обработайте совместимость Python 3 для итеративных классов в Python 2, выполнив следующие действия:
class MyIterable(object): #or collections.Iterator
def __iter__(self):
return self
def next(self): #code
__next__ = next
Оба они теперь являются итераторами и могут проходить через:
ex1 = MyIterableClass()
ex2 = MySequence()
for (item) in (ex1): #code
for (item) in (ex2): #code
Генераторы простые способы создания итераторов. Генератор представляет собой итератор и итератор является итерацией.