yield vs return в Python: разница для собеса

return — стандартный способ вернуть значение и завершить функцию. yield превращает функцию в генератор: каждый вызов возобновляет выполнение с того же места. На собесе любят спрашивать «когда и зачем использовать yield» — это про память.

Если коротко. return завершает функцию и возвращает значение. yield превращает функцию в генератор — она «отдаёт» значение и сохраняет состояние для следующего вызова.
Проверь себя · 1/3разбор после ответа
Дана функция def total(*args): return sum(args). Что вернет вызов total(1, 2, 3)?

yield vs return: таблица различий

Параметрyieldreturn
ВозвращаетОдно значениеГенератор (итератор)
Состояние функцииУничтожаетсяСохраняется между вызовами
ПамятьЗависит от результатаO(1) — по одному элементу за раз
Можно прерватьНетДа (по next() / break)
МногоразоваяДаНет (исчерпывается)

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

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

На примере

return — всё в памяти
def read_lines(path):
    with open(path) as f:
        return f.readlines()   # весь файл в память
yield — ленивая итерация
def read_lines(path):
    with open(path) as f:
        for line in f:
            yield line             # по строке за раз

Ловушка на собесе

Классика: генератор можно перебрать ОДИН раз. g = gen(); list(g); list(g) — второй list будет пустой. Для повторов или нужен повторный вызов функции, или сохранение в список.
Тренировать Python в Telegram

Ещё сравнения по теме