我刚刚读过PEP0492谈论协程的新方法,但 PEP 未能让我理解基于生成器的协程和本机协程之间的区别。有人可以告诉我其中的区别(也许可以举例)吗?
据我了解,他们使用不同的词(yield/yield from 和 wait/async/yield)。据我所知,在本机协程结束时预计会产生收益,但这也适用于基于生成器的协程。
扩展一下 Mike S 所写的内容:CPython 中的本机协程与生成器共享大部分相同的代码,因此功能上几乎没有差异。然而,我认为 PEP-492 超越了“语法糖”的门槛。生成器和本机协程具有不同的用途,因此新语法阐明了作者的意图,并且可以完成旧语法无法完成的事情。这里有些例子:
- 生成器是可迭代的,而原生协程则不是。
- 本机协程还允许使用新语法,例如异步上下文管理器和异步迭代器。
- 协程具有有用的调试消息,例如如果你从来没有警告过
await
一个协程对象。
新的语法也很好地反映了asyncio
库并且类似于其他语言中使用的关键字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)