Итератор выдаёт элементы через next и завершает обход StopIteration. Генератор — удобный способ создать итератор функцией с yield, сохраняя состояние между выдачами.
Что такое итераторы и генераторы в Python? В чём их плюсы?
Итератор выдаёт элементы через __next__ и завершает обход StopIteration. Генератор — удобный способ создать итератор функцией с yield, сохраняя состояние между выдачами.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Итератор выдаёт элементы через next и завершает обход StopIteration. Генератор — удобный способ создать итератор функцией с yield, сохраняя состояние между выдачами.
У итерируемого объекта iter() получает итератор; это не одно и то же понятие. Например, список можно обходить многократно новыми итераторами, а конкретный генератор обычно одноразовый. Ленивость позволяет обрабатывать большие потоки без списка всех результатов, но не гарантирует нулевое потребление памяти: локальные данные сохраняются. Генераторы удобны для конвейеров и ранней остановки; недостатки — отложенные ошибки, отсутствие произвольного доступа и необходимость аккуратно закрывать ресурсы.