Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么可以';'async def`coroutine函数是否包含任何'yield`?_Python_Python 3.x - Fatal编程技术网

Python 为什么可以';'async def`coroutine函数是否包含任何'yield`?

Python 为什么可以';'async def`coroutine函数是否包含任何'yield`?,python,python-3.x,Python,Python 3.x,简而言之,从Python来看,这是为什么 async defcoroutine函数不能包含任何yield 谢谢。这在引入async/wait并禁止在其内部使用yield的基本原理中说明: 当前Python支持通过生成器(PEP)实现协同路由 PEP 380中引入的语法产生了更大的影响。 这种方法有许多缺点: 很容易将协程与常规生成器混淆,因为它们 共享相同的语法;对于新开发人员来说尤其如此 函数是否为协程取决于是否存在 指从其主体中的语句产生的收益或收益,这可能导致 当此类陈述出现在或从中消失

简而言之,从Python来看,这是为什么

async def
coroutine函数不能包含任何
yield


谢谢。

这在引入
async
/
wait
并禁止在其内部使用
yield
的基本原理中说明:

当前Python支持通过生成器(PEP)实现协同路由 PEP 380中引入的语法产生了更大的影响。 这种方法有许多缺点:

  • 很容易将协程与常规生成器混淆,因为它们 共享相同的语法;对于新开发人员来说尤其如此

  • 函数是否为协程取决于是否存在 指从其主体中的语句产生的收益或收益,这可能导致 当此类陈述出现在或从中消失时,出现不明显的错误 重构期间的函数体

  • 支持异步调用是非常重要的 限于语法上允许屈服的表达式,限制 句法特征的有用性,如with和for语句

这仅适用于Python 3.5


在Python3.6中,出现了异步发电机并解除了禁令。现在,在async def函数中使用
yield
,将创建一个异步生成器

谢谢。在
异步def
函数中使用
是否会产生协同程序?协程的定义是什么?协程是一个函数,它可以产生值并在执行过程中接受调用者的值。