Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: yield, return, generator, Python, lazy evaluation

Чем yield отличается от return?

Вопрос проверяет понимание ключевого различия между операторами yield и return в Python, что важно для работы с генераторами и ленивыми вычислениями.

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

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

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

В Python return и yield — это операторы, управляющие потоком данных из функции, но они работают принципиально по-разному. return является стандартным способом завершить функцию и вернуть результат её работы. Как только выполнение доходит до return, функция завершается, все её локальные переменные уничтожаются, и управление возвращается вызывающему коду вместе с возвращаемым значением. Последующие вызовы функции начинают её выполнение с самого начала.

Что такое yield и генераторы?

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

Практическое применение и пример

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

# Пример функции с return (обычный список)
def get_squares_return(n):
    result = []
    for i in range(n):
        result.append(i * i)
    return result  # Возвращает весь список сразу

# Пример функции с yield (генератор)
def get_squares_yield(n):
    for i in range(n):
        yield i * i  # Возвращает одно значение и приостанавливается

# Использование
print("С return (весь список в памяти):", get_squares_return(5))
# Вывод: [0, 1, 4, 9, 16]

gen = get_squares_yield(5)
print("С yield (ленивая генерация):")
for square in gen:
    print(square, end=' ')  # Вывод: 0 1 4 9 16
# Или можно использовать next()
# print(next(gen)) # 0
# print(next(gen)) # 1

Ключевые отличия в поведении

  • Состояние: return завершает функцию и стирает состояние. yield приостанавливает функцию и сохраняет состояние для последующего возобновления.
  • Возвращаемый тип: Функция с return возвращает единое значение (например, список). Функция с yield возвращает объект-генератор (итератор).
  • Потребление памяти: return часто требует хранения всех результатов в памяти перед возвратом. yield генерирует значения по одному, что экономит память.
  • Управление потоком: После return функция запускается заново. После yield выполнение продолжается с точки остановки.

Вывод: Используйте yield и генераторы, когда вам нужно обрабатывать большие или потенциально бесконечные потоки данных, не загружая их все в оперативную память. Это основа для ленивых вычислений в Python. Обычный return подходит для случаев, когда результат конечен, невелик и нужен целиком для дальнейшей обработки.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Python

    Python

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

#yield

#return

#generator

#Python

#lazy evaluation

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

  • Аватар

    Python Guru

    Sergey Filichkin

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