Почему бы не сделать все итерации своими собственными многоходовыми итераторами? - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок в Python, но мое понимание итераторов и итераторов в Python заключается в том, что они поддерживают протокол итераторов.

В некотором инструменте / контексте итерации итерация передается в iter() для возврата итератора. Затем next() вызывается последовательно для генерации всех элементов, пока next() не вызовет исключение StopIteration.

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

Кажется, что избавление от различий между итерируемым и итератором, делающее все итерируемые своими собственными многоходовыми итераторами, было бы чище.

В чем выгода / logi c разделения итераторов и итераторов в протоколе итераторов?

1 Ответ

0 голосов
/ 29 апреля 2020

iterable означает, что объект может быть повторен. Обычно это означает, что iter () может быть вызван для экземпляра для получения итератора.

iterator - это объект, который выполняет итерацию. Они также являются итеративными, то есть их можно вызывать в iter () и возвращать ... самим. Вызывая next () для него, итератор возвращает следующий объект в последовательности.

Просто: все итераторы и итераторы дают итератор при вызове с помощью iter (). Все итераторы дают следующий элемент в последовательности при вызове с помощью next ().

Итераторы являются однопроходными, потому что это облегчает жизнь программиста. Это может быть передано в качестве итератора: (x*3 for x in range(10))

Так же можно это сделать:

__iter__(self):
    for x in range(10):
        yield x*3

Если бы они были многопроходными, каждый из них должен был бы быть запрограммирован внутри другого l oop, добавление дополнительной работы программисту итератора.

Если вы хотите пройти снова, получите новый итератор из итерируемого, когда у итератора заканчиваются элементы для возврата. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...