Итератор выдаёт элементы по одному через next и возвращает себя из iter. Генератор — удобный способ создать итератор с сохранением состояния через yield.
[имя] спросил: Что такое генераторы и итераторы в Python? В чём разница?
Итератор выдаёт элементы по одному через __next__ и возвращает себя из __iter__. Генератор — удобный способ создать итератор с сохранением состояния через yield.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Итератор выдаёт элементы по одному через next и возвращает себя из iter. Генератор — удобный способ создать итератор с сохранением состояния через yield.
Генераторная функция при вызове возвращает generator object, а её тело начинает выполняться при продвижении итерации. После yield выполнение приостанавливается и затем продолжается с того же места. Не каждый iterator является generator: можно написать собственный класс. Iterable шире iterator: список можно многократно обходить, создавая новые итераторы. Генератор обычно одноразовый и вычисляет значения лениво, но не делает тяжёлую операцию внутри каждого шага автоматически дешёвой.