首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Python3.5有基于生成器的联合例程?

为什么Python3.5有基于生成器的联合例程?
EN

Stack Overflow用户
提问于 2016-09-28 13:23:35
回答 1查看 80关注 0票数 1

如果有的话,native和基于generator的协同例程之间没有功能差异(除了语法);为什么Python3两者都有呢?我明白什么是以发电机为基础的联合例程。

是否有一个特定的设计决策或想法,使两者都有意义?

另外,我在这里有点困惑;生成器和协同例程之间的区别是我不能写入generator;这个佩普增加了这样的能力。我想这两者在蟒蛇身上没有区别吧?(我还假设,写入一个共同例程并将一个值发送给一个共同例程是一回事)

为什么asyncio支持两者的使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-28 13:58:32

在3.5之前,发电机和联合程序之间没有真正的区别.生成器是一个共同例程,完全通过使用yield作为表达式,并通过send()期待数据。

随着新的语法添加到Python3.5中,这种类型发生了变化。async语法既是语法糖(在代码中将生成器可视化地转换为异步协同),也是对语言的扩展,以便能够将协同作为上下文管理器和迭代器(async withasync for)使用。

引用PEP的话:

建议在Python中使coroutines成为一个适当的独立概念,并引入新的支持语法。最终目标是帮助建立一个通用的、易于接近的、使用Python进行异步编程的头脑模型,并使其尽可能接近同步编程。

在引擎盖下,共例程基本上仍然是发电机和发电机支持的大部分相同的功能.但是,为了使显式测试可访问对象成为可能,现在协同例程是一种不同的类型,请参阅第24400期中的动机(最初这是一个每个实例的标志,而不是一个不同的类型)。

要明确的是,您仍然可以使用.send()作为生成器。但是一个发电机是不可能的,它是不会合作的。

asyncio必须同时支持这两种语言,因为库的目标是与Python < 3.5兼容,因此不能依赖可用的新语言结构。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39748849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档