Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 3.x 为什么本机协同路由的收益是有效的语法_Python 3.x_Python Asyncio_Python 3.3 - Fatal编程技术网

Python 3.x 为什么本机协同路由的收益是有效的语法

Python 3.x 为什么本机协同路由的收益是有效的语法,python-3.x,python-asyncio,python-3.3,Python 3.x,Python Asyncio,Python 3.3,介绍了语法的收益率,并指出: yield from <expr> 合法吗?因为声明本机协程不实现\uuu iter\uuu和\uu next\uuuu方法,因此不适用。然而,并没有PEP讨论从接受本机协同路由返回的协同路由对象的行为的这种变化 我知道基于生成器的协同程序在3.10中会被弃用,但我仍然想知道为什么yield from可以与本机协同程序一起工作 然而,我无法理解为什么从本机协同程序中产生(使用异步/等待语法) 合法吗?因为PEP-492声明本机协同程序不实现\uuuuu

介绍了语法的收益率,并指出:

yield from <expr>
合法吗?因为声明本机协程不实现
\uuu iter\uuu
\uu next\uuuu
方法,因此不适用。然而,并没有PEP讨论从接受本机协同路由返回的协同路由对象的行为的这种变化

我知道基于生成器的协同程序在3.10中会被弃用,但我仍然想知道为什么
yield from
可以与本机协同程序一起工作

然而,我无法理解为什么
从本机协同程序中产生(使用异步/等待语法)
合法吗?因为PEP-492声明本机协同程序不实现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

然而,PEP 492指出“基于生成器的协同程序[…]可以
本机协同程序对象中产生。”

然而,我不明白为什么本地合作项目的收益是合法的

因为在其他情况下,本机协程将无法从使用基于生成器的协程的遗留代码中使用,并且从
中生成


例如,在引入
async def
之后的某个时刻,大多数asyncio原语,包括
asyncio.sleep
,都被转换为
async def
协同程序。如果那些不支持
产生,则转换将使用以前唯一可能的等待方式
产生,打破所有等待
asyncio.sleep
的现有异步IO代码。这种向后的不兼容性可能会阻碍本机协同程序的引入,因此避免了这种情况。

我理解您所描述的从中产生本机协同程序的基本原理。但是,我正在寻找描述此行为的权威文档/PIP。@dataCheeku PEP 492中描述了此行为,我现在已修改了答案,以明确说明此行为。
yield from native_coroutines (using async/await syntax)