Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: generator, next

Что происходит внутри функции-генератора при вызове next()?

Вопрос проверяет понимание, что генератор “останавливается и продолжает” выполнение, сохраняя состояние между вызовами.

Короткий ответ

Генератор — это функция, которая возвращает значения по одному через yield. При next(gen) выполнение продолжается с места последнего yield, пока не встретится следующий yield или функция не завершится. Все локальные переменные и позиция выполнения сохраняются внутри генератора. Если значения больше нет, генератор завершает работу и возбуждает StopIteration.

Длинный ответ

Генератор можно представить как “функцию с паузой”, которая хранит своё состояние между вызовами.

Определение: yield — операция, которая возвращает значение наружу и “замораживает” выполнение функции, сохраняя её состояние.

Что делает next() пошагово

Когда вы вызываете next(gen):

  1. Если это первый вызов, генератор стартует с начала функции.

  2. Интерпретатор выполняет код до ближайшего yield.

  3. Значение после yield отдаётся наружу как результат next(...).

  4. Генератор “замораживается”:

    • сохраняется текущая позиция выполнения;

    • сохраняются локальные переменные;

    • сохраняется внутреннее состояние (условно, “кадры” выполнения).

  5. Следующий next(gen) продолжит выполнение сразу после того yield, на котором остановились.

Наглядный пример

def gen():
    x = 10
    yield x
    x += 5
    yield x

g = gen()
print(next(g))  # 10
print(next(g))  # 15

Что важно понимать про состояние

  • Генератор не “пересчитывает всё заново”: он продолжает выполнение.

  • Локальные переменные живут между вызовами, пока генератор не завершится.

  • После завершения дальнейшие next() всегда приводят к StopIteration.

Вывод

next() возобновляет выполнение генератора с сохранённого места, доводит до следующего yield, возвращает значение и снова приостанавливает генератор, сохраняя состояние.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Python

    Python

Ключевые слова

#generator

#next

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.