Семантика `yield from`
Python
Senior
Яндекс
Объясните, что делает конструкция `yield from` в генераторах. Чем она отличается от простого цикла `for x in subgen: yield x` и как влияет на обработку исключений и значений, посылаемых через `send`?
Ответы
`yield from`
`yield from` делегирует часть работы подгенератору: пробрасывает значения, исключения и метод `send` к вложенному генератору, реализуя полный протокол генератора через него.
Эквивалентно циклу `for`, но также:
- перенаправляет `send`, `throw`, `close` во вложенный генератор;
- возвращает значение из `return` вложенного генератора как результат выражения `yield from`.
Это делает композицию генераторов проще и позволяет строить корутины старого стиля (до `async/await`).