Что такое ключевое слово yield?

«Что такое ключевое слово yield?» — вопрос из категории Python, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

yield — это ключевое слово в Python, используемое для создания генераторов. Функция, содержащая yield, возвращает специальный итератор — генератор, который выдаёт значения по одному, приостанавливая своё выполнение после каждого yield и сохраняя локальное состояние для последующего возобновления.

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

def countdown(n):
    print("Starting countdown from", n)
    while n > 0:
        yield n  # Возвращает значение и приостанавливается
        n -= 1
    print("Done!")

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

Ключевые преимущества:

  • Ленивые вычисления: Значения генерируются "на лету", а не хранятся в памяти целиком, что эффективно для работы с большими или бесконечными последовательностями.
  • Сохранение состояния: Функция-генератор "помнит" своё место между вызовами.

Практическое применение в тестировании: Генераторы полезны для:

  1. Создания тестовых данных: Генерация большого потока данных для нагрузочного или стресс-тестирования без потребления всей оперативной памяти.

    def generate_test_ids(start):
        id = start
        while True:
            yield f"user_{id}"
            id += 1
    
    id_gen = generate_test_ids(1000)
    test_user_ids = [next(id_gen) for _ in range(10000)]  # 10k ID
  2. Имитации потокового ввода/вывода в интеграционных тестах.
  3. Реализации кастомных итераторов для объектов сложной структуры, которые необходимо последовательно проверять в тестах.