首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在asyncio中,"yield from“语法是做什么的?它与"await”有什么不同?

在asyncio中,"yield from“语法是做什么的?它与"await”有什么不同?
EN

Stack Overflow用户
提问于 2017-05-30 06:38:55
回答 1查看 16.9K关注 0票数 52

从已经编写了异步代码但希望更好地理解内部工作原理的人的角度来看,什么是yield fromawait,以及它们对允许异步代码有什么用处?

有一个highly upvoted问题询问了yield from语法和one explaining async and await的使用,但这两个问题都深入讨论了不同的主题,并没有真正简明地解释底层代码以及它是如何适应异步的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 08:26:19

简短回答:

yield from是一种等待asyncio的协程的旧方法。

await是一种等待asyncio协程的现代方式。

详细答案:

Python有生成器,这是一种特殊类型的函数,可以生成一系列结果,而不是单个值。从Python3.3开始,添加了yield from表达式。它allows一个生成器以将其部分操作委托给另一个生成器。

从Python3.4开始,asyncio模块被添加到标准库中。它允许我们编写清晰且易于理解异步代码。虽然在技术上异步的协程可以以不同的方式实现,但在asyncio中,它们是使用生成器实现的(您可以查看excellent video,其中展示了如何使用生成器来实现协程)。@asyncio.coroutine是从生成器生成协程的一种方式,而yield from是等待协程的一种方式--只是实现的细节。

这就是为什么yield from开始被用于两个“不同的东西”。

从Python3.5(参见PEP 492)开始,协程有了新的语法。现在您可以使用async def定义协程,并使用await表达式等待它。它不仅写起来更短,而且让我们更清楚地理解我们使用的是asyncio的协程。

如果您正在使用Python,那么您可以忘记使用yield from作为3.5+的协程,而使用await来实现它。

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

https://stackoverflow.com/questions/44251045

复制
相关文章

相似问题

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