← Назад к вопросам

Зачем нужен yield вместо return в функциях в Python?

1.6 Junior🔥 181 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Yield vs Return в Python

yield и return — это два различных механизма возврата значений из функций в Python. Каждый из них имеет свою область применения и особенности.

Основные различия

return завершает выполнение функции и возвращает значение. Функция перестаёт работать, и всё, что было в памяти, очищается. В контексте Data Science это означает, что если вы обрабатываете большой набор данных и возвращаете весь результат сразу, вся информация должна поместиться в памяти.

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

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

# Плохо для больших данных — return
def read_large_file(path):
    with open(path) as f:
        lines = [line.strip() for line in f]  # Весь файл в памяти!
    return lines

# Хорошо для больших данных — yield
def read_large_file(path):
    with open(path) as f:
        for line in f:
            yield line.strip()  # По одной строке за раз

# Использование
for line in read_large_file(huge_file.txt):
    process(line)

В контексте Data Science

В машинном обучении и анализе данных yield особенно полезен при:

  1. Батчевой обработке данных для нейросетей:
def batch_generator(X, y, batch_size=32):
    n_samples = len(X)
    for i in range(0, n_samples, batch_size):
        yield X[i:i+batch_size], y[i:i+batch_size]

# Использование в Keras/TensorFlow
model.fit(batch_generator(X_train, y_train), epochs=10)
  1. Работе с большими CSV файлами:
def read_csv_chunks(path, chunksize=10000):
    df_reader = pd.read_csv(path, chunksize=chunksize)
    for chunk in df_reader:
        yield chunk.dropna()
  1. Обработке потоковых данных и временных рядов

Преимущества yield

  • Экономия памяти: обработка больших датасетов без загрузки в RAM
  • Ленивое вычисление: значения генерируются по необходимости
  • Бесконечные последовательности: можно создавать бесконечные генераторы
  • Более отзывчивое приложение: результаты становятся доступны сразу, не нужно ждать полного вычисления

Когда использовать что

СценарийИспользуй
Малые данные (< 1GB)return
Большие файлы или потокиyield
Батчи для обучения моделейyield
Простая функция с одним результатомreturn
Нужна вся информация сразуreturn
Ленивые вычисленияyield

yield — это инструмент, который делает код более эффективным при работе с большими объёмами данных, что критично в Data Science проектах.