Итерируемый объект (iterable) — любой объект, который может вернуть итератор (iterator). Имеет метод __iter__(). Пример: списки, кортежи, строки.
Итератор (iterator) — объект, который представляет поток данных. Возвращает следующий элемент при вызове метода __next__(). Если элементов больше нет, генерирует исключение StopIteration. Имеет методы __iter__() (возвращает сам себя) и __next__().
Генератор (generator) — специальный тип итератора, созданный с помощью функции-генератора или генераторного выражения. Функции-генераторы используют ключевое слово yield для выдачи элементов. Они сохраняют свое состояние между вызовами.
python
| Характеристика | Итерируемый объект | Итератор | Генератор |
|---|---|---|---|
| Возможность итерации | Да | Да | Да |
Метод __iter__() | Возвращает итератор | Возвращает сам себя | Возвращает сам себя |
Метод __next__() | Нет (требует iter() сначала) | Возвращает следующий элемент | Используется для получения элементов (next()) |
| Создание | Встроенные типы, классы с __iter__ | Получается из итерируемого объекта (iter()) | Функция-генератор с yield, генераторные выражения |
| Память | Хранит все элементы | Хранит состояние и ссылку на следущий элемент | Лениво вычисляет элементы, хранит состояние |