Итерируемые и итераторы

Введение

Примеры

Итератор против Итерируемого против Генератора

Итерацию является объектом , который может вернуть итератор. Любой объект с состоянием , которое имеет __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

 

Генераторы простые способы создания итераторов. Генератор представляет собой итератор и итератор является итерацией.