yield

1. Что такое yield

  • yield — это ключевое слово, которое превращает функцию в генератор.

  • В отличие от return, которое завершает функцию и возвращает значение, yield возвращает значение и "замораживает" состояние функции, чтобы при следующем вызове продолжить с того же места.


2. Пример использования

def my_generator(n):
    for i in range(n):
        yield i  # возвращает i и сохраняет текущее состояние

gen = my_generator(3)

print(next(gen))  # 0
print(next(gen))  # 1
print(next(gen))  # 2
# print(next(gen))  # StopIteration
  • Каждый вызов next(gen) возобновляет функцию после последнего yield.

  • После завершения всех yield генератор выдаёт StopIteration.


3. Генераторное выражение

  • Более компактная форма генератора, похожа на list comprehension, но с ():


4. Отличие yield от return

Характеристика

return

yield

Возвращаемое значение

Один раз

Можно несколько раз

Завершение функции

Да

Нет, сохраняется состояние

Тип функции

Обычная функция

Генератор


5. Применение в автотестах

  • Генерация тестовых данных "на лету":

  • Обработка больших файлов или логов, чтобы не загружать весь файл в память:

  • Использование с pytest:


💡 Вывод:

  • yield = возвращает значение без завершения функции и создаёт генератор.

  • Идеально подходит для ленивой генерации данных, больших последовательностей и оптимизации памяти.

Last updated

Was this helpful?