Python·100 вопросов

Что такое итератор и итерируемый объект?

Ответ

В экосистеме Python понятия итерируемого объекта и итератора тесно связаны, но выполняют разные роли в процессе обхода коллекций. Итерируемый объект — это любая структура данных, по элементам которой можно пройтись в цикле for, например, списки, строки, словари или файлы. Такой объект знает, как предоставить доступ к своим элементам, но сам по себе состояние текущего шага не хранит.

Итератор, в свою очередь, представляет собой самостоятельный объект состояния, который помнит текущую позицию и знает, как получить следующий элемент.

Чтобы четко понимать разницу и механику работы этих сущностей, рассмотрим по шагам, как устроен процесс итерации под капотом:

Вы передаете итерируемый объект во встроенную функцию iter(obj), которая обращается к его внутреннему методу __iter__ и возвращает полноценный итератор.
Цикл for или другой потребитель начинает вызывать функцию next(it) для полученного итератора.
Итератор возвращает следующий элемент последовательности, каждый раз сдвигая внутренний указатель вперед.
Когда элементы заканчиваются, итератор возбуждает специальное исключение StopIteration, которое сигнализирует циклу о необходимости завершить работу.

Важно отметить, что любые генераторы функций и выражений также являются итераторами, так как они лениво вычисляют значения на лету и расходуют минимальное количество оперативной памяти.

Полезен ли этот ответ?

Другие вопросы этой темы

Связанные вопросы из других тем