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