从Nutshell中的Python,为什么会这样呢
async def
协同程序函数不能包含任何yield
。
感谢。
答案 0 :(得分:3)
PEP 492引用async
/ await
并禁止在其中使用yield
的理由中说明了这一点:
当前的Python支持通过生成器实现协同程序(PEP 342),通过PEP 380中引入的语法的产量进一步增强。 这种方法有许多缺点:
很容易将协同程序与常规发生器混淆,因为它们 分享相同的语法;对于新开发者来说尤其如此。
函数是否是协程是由存在决定的 从其身体中的陈述中得出的收益率或收益率,这可能导致 当这些陈述出现或消失时,不明显的错误 重构过程中的函数体。
支持异步调用 仅限于在语法上允许产量的表达式,限制 句法特征的有用性,例如with和for语句。
这仅适用于Python 3.5
在Python 3.6中,PEP 525出现并用异步生成器解除了禁令。现在在异步def函数中使用yield
会导致创建异步生成器。