Python для профессионаловОткрытые материалыГенераторы и yield в Python: как это работает

Генераторы и yield в Python: как это работает

Уроки курсаГенераторы и yield в Python: как это работает

Генератор в Python выдаёт значения по одному, не создавая всю последовательность заранее. Обычная функция заканчивает работу через return, а функция с yield приостанавливается: локальные переменные и позиция выполнения сохраняются до следующего вызова next().

def squares(limit: int):
    for number in range(limit):
        yield number ** 2

values = squares(3)
print(next(values))  # 0
print(next(values))  # 1
print(list(values))  # [4]

Вызов squares(3) не выполняет тело функции целиком. Он возвращает объект-генератор. Каждый next() продолжает код до следующего yield; после исчерпания функции возникает StopIteration. Цикл for обрабатывает этот протокол автоматически.