Подтвердить что ты не робот

Что делает что-то итерабельным в python

Что делает что-то итерабельным в Python? то есть. может пересечь его с помощью for

Возможно ли создать итеративный класс в Python? Если да, то как?

4b9b3361

Ответ 1

Чтобы сделать класс итеративным, напишите метод __iter__(), который возвращает итератор:

class MyList(object):
    def __init__(self):
        self.list = [42, 3.1415, "Hello World!"]
    def __iter__(self):
        return iter(self.list)

m = MyList()
for x in m:
    print(x)

печатает

42
3.1415
Hello World!

В примере используется итератор списка, но вы также можете написать свой собственный итератор, либо сделав __iter__() генератором, либо вернув экземпляр класса итератора, который определяет __next__() метод.

Ответ 2

Документация Python описывает именно это:

Для контейнерных объектов необходимо определить один метод, чтобы обеспечить поддержку итерации:

container.__iter__()

Возвращает объект-итератор. Объект необходим для поддержки протокола итератора, описанного ниже. Если контейнер поддерживает разные типы итераций, могут быть предоставлены дополнительные методы, чтобы специально запросить итераторы для этих типов итераций. (Пример объекта, поддерживающего несколько форм итерации, будет представлять собой древовидную структуру, которая поддерживает как первый, так и первый шаг по пересечению). Этот метод соответствует слову tp_iter структуры типов для объектов Python в API Python/C.

Итераторы сами должны поддерживать следующие два метода, которые вместе образуют протокол итератора:

iterator.__iter__()

Вернуть сам объект итератора. Это необходимо для использования как контейнеров, так и итераторов с инструкциями for и in. Этот метод соответствует слову tp_iter структуры типов для объектов Python в API Python/C.

iterator.next()

Возвращает следующий элемент из контейнера. Если дополнительных элементов нет, вызовите исключение StopIteration. Этот метод соответствует слову tp_iternext структуры типов для объектов Python в API Python/C.

Ответ 3

Любой объект с методом __iter__() считается итерируемым.

Кроме того, любая последовательность (объекты, имеющие метод __getitem__()) может возвращать итератор. Итератором является объект с методом __next__(), который возвращает следующий объект в последовательности и генерирует исключение StopIteration.

Ответ 4

Этот question может вам помочь, он описывает, как сделать interator