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