Какое ключевое слово создает генератор в Python?

«Какое ключевое слово создает генератор в Python?» — вопрос из категории Python, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Генератор создается с помощью ключевого слова yield. Когда функция содержит yield, она возвращает специальный объект-генератор, а не выполняет код сразу. Генератор сохраняет свое состояние между вызовами и генерирует значения по одному по мере необходимости (ленивые вычисления).

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

def countdown(n):
    """Генератор, который отсчитывает от n до 1."""
    while n > 0:
        yield n
        n -= 1

# Использование
for number in countdown(5):
    print(number)  # Выведет: 5, 4, 3, 2, 1

Почему это полезно:

  • Экономия памяти: Генератор не хранит всю последовательность в памяти, а вычисляет каждое значение на лету. Это критично для работы с большими или бесконечными потоками данных.
  • Ленивые вычисления: Код внутри функции выполняется только при обращении к следующему элементу (например, в цикле for или при вызове next()).

Выражение-генератор (generator expression) — это более компактная форма, похожая на list comprehension:

# List comprehension (создает список в памяти)
squares_list = [x**2 for x in range(1000000)]

# Generator expression (ленивое вычисление)
squares_gen = (x**2 for x in range(1000000))

print(next(squares_gen))  # 0
print(next(squares_gen))  # 1