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

Введение

Примеры

  • 3

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

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

    Пример:

    импорт коллекций >>> collection.Iterator () >>> TypeError: Не могу создать экземпляр абстрактного класса Iterator с абстрактными методами далее >>> TypeError: Не могу создать экземпляр абстрактного класса Iterator с абстрактными методами __next__

    Обработайте совместимость Python 3 для итеративных классов в Python 2, выполнив следующие действия:

    класс MyIterable (object): #or collection.Iterator, который я бы порекомендовал .... .... def __iter __ (self): вернуть self def next (self): #code __next__ = next

    Оба они теперь являются итераторами и могут проходить через:

     ex1 = MyIterableClass()
    ex2 = MySequence()
    
    for (item) in (ex1): #code
    for (item) in (ex2): #code
    
     

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

Синтаксис

Параметры

Примечания