yield from — это конструкция Python, которая делегирует итерацию другому генератору или итерируемому объекту, избавляя тебя от необходимости писать цикл внутри функции-генератора.
Вместо того чтобы писать цикл вроде этого:
for item in other_generator():
yield item
Ты можешь упростить это до:
yield from other_generator()
Оба варианта дают одинаковый результат, но yield from чище и эффективнее.
StopIteration — когда вложенный генератор исчерпан, управление автоматически возвращается делегирующему генераторуreturn вложенного генератора становится результатом выражения yield fromsend() и throw() от вызывающего кода прозрачно передаются вложенному генераторуdef inner():
yield 1
yield 2
return "done"
def outer():
result = yield from inner() # captures inner's return value
yield result
list(outer()) # → [1, 2, "done"]
yield from особенно важен в асинхронном программировании — фреймворк asyncio в Python изначально полагался на него до появления синтаксиса async/await. Понимание этого показывает знание того, как работают корутины и делегирование генераторов на фундаментальном уровне.
Используй yield from, когда тебе нужно:
yield from может перехватить значение return из подгенератора и сделать его результатом выражения yield from.
Новый — ещё не проверен сообществом
Вы