PEP-380 вводит синтаксис yield from
и говорит:
yield from <expr>
где - выражение, вычисляющее итерацию, из которой извлекается итератор.Таким образом, следующее является законным и имеет смысл:
- yield от генераторов
- yield от generator_based_coroutine (в котором используется декоратор
@asyncio.coroutine
)
, поскольку обагенераторы и сопрограммы на основе генератора являются экземплярами Iterable.Однако я не понимаю, почему
yield from native_coroutines (using async/await syntax)
является законным?Поскольку PEP-492 утверждает, что собственные сопрограммы не реализуют методы __iter__
и __next__
и, следовательно, не могут быть повторяемыми.Тем не менее, нет PEP, который говорит об этом изменении в поведении yield from для приема объектов сопрограмм, которые возвращаются нативными сопрограммами?
Я знаю, что подпрограммы на основе генератора устареют в 3.10, но я все еще хочу знать, почему yield from
работает с нативными сопрограммами.