yield vs return в Python: разница для собеса
return — стандартный способ вернуть значение и завершить функцию. yield превращает функцию в генератор: каждый вызов возобновляет выполнение с того же места. На собесе любят спрашивать «когда и зачем использовать yield» — это про память.
Если коротко. return завершает функцию и возвращает значение. yield превращает функцию в генератор — она «отдаёт» значение и сохраняет состояние для следующего вызова.
Проверь себя · 1/3разбор после ответа
Дана функция
def total(*args): return sum(args). Что вернет вызов total(1, 2, 3)?yield vs return: таблица различий
Когда использовать yield
- Функция возвращает один результат и завершается.
- Нужно вернуть несколько значений — упакуйте в tuple или dict.
- Простая трансформация, кэшируемое значение.
Когда использовать return
- Хотите итерировать по большому потоку, не загружая всё в память.
- Источник данных бесконечный или огромный (логи, файлы построчно).
- Нужна ленивая (lazy) обработка по требованию.
На примере
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 будет пустой. Для повторов или нужен повторный вызов функции, или сохранение в список.