I just read PEP0492 talking about the new approach on coroutines but the PEP failed to make me understand the difference between generator-based coroutines and native ones. Can someone tell me the difference (maybe with examples)?
For what I understood they uses different words (yield/yield from and await/async/yield). I understand that at the end of a native coroutine a yield is expected, but this also stands true for generator-based ones.
To expand on what Mike S wrote: native coroutines in CPython share most of the same code as generators, so there's little functional difference. However, I think that PEP-492 rises above the threshold of just "syntactic sugar". Generators and native coroutines have separate purposes, so the new syntax clarifies an author's intent and can do things the old syntax cannot. Here are some examples:
await
a coroutine object.The new syntax also nicely mirrors the asyncio
library and resembles keywords used in other languages.
There is no functional difference. "Native coroutines" using the async
and await
keywords are just syntactic sugar for what was previously implemented in "generator-based coroutines."
The use of async
and await
is recommended in the 3.5 docs if there is no need to support older Python versions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With