> Что такое итераторы и генераторы в Python и в чем их разница (Python)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: Сбер

Стек: Python

> Пример ответа

Итераторы и генераторы - это механизмы для последовательного перебора элементов, но они имеют ключевые различия.

Итератор - это объект, который реализует протокол итерации: методы __iter__() (возвращает сам итератор) и __next__() (возвращает следующий элемент или выбрасывает исключение StopIteration). Любой итератор можно обойти с помощью цикла for. Пример: list, tuple, str - это итерируемые объекты, а их итераторы создаются функцией iter().

Генератор - это частный случай итератора. Он создается с помощью функции с ключевым словом yield или генераторного выражения (например, (x**2 for x in range(10))). При каждом вызове next() генератор приостанавливает выполнение до следующего yield, сохраняя состояние между вызовами. Генераторы ленивы - они вычисляют значения на лету, что экономит память.

Основные различия:

  1. Создание: Итераторы реализуются через классы с методами __iter__ и __next__. Генераторы - через функции с yield или выражения.
  2. Состояние: Генераторы автоматически сохраняют локальное состояние и позицию выполнения. Итераторы требуют ручного управления состоянием (например, через атрибуты класса).
  3. Простота: Генераторы короче и удобнее для создания последовательностей, особенно бесконечных. Итераторы дают больше контроля, но требуют больше кода.
  4. Одноразовость: И генераторы, и итераторы можно обойти только один раз (если не создавать новый объект).

Пример генератора:

PYTHON
def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1

Пример итератора:

PYTHON
class CountUpTo:
def __init__(self, n):
self.n = n
self.i = 1
def __iter__(self):
return self
def __next__(self):
if self.i > self.n:
raise StopIteration
result = self.i
self.i += 1
return result

На практике для простых задач предпочитают генераторы, а итераторы - когда нужна сложная логика перебора или работа с внешними ресурсами.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью