首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >委托给python 3.6+异步协同程序中的生成器

委托给python 3.6+异步协同程序中的生成器
EN

Stack Overflow用户
提问于 2018-04-24 05:00:03
回答 1查看 306关注 0票数 2

在python 3.3中,我可以执行以下操作

代码语言:javascript
复制
def _gen():
    for i in range(3):
        yield i

def gen():
    yield from _gen()

for i in gen():
    print(i)

>>> 0
>>> 1
>>> 2

我能在python 3.6 asyncio协程中做同样的事情吗?(警告,人为的例子)

代码语言:javascript
复制
async def _gen():
    for i in range(3):
        yield await get_num(i) # get_num is a coroutine

async def gen():
    yield from _gen() # Syntax error!

for i in gen():
    print(i)

我需要将gen定义为

代码语言:javascript
复制
async def gen():
    async for i in _gen():
        yield i

但似乎应该有一种方法可以委托给另一个协程,就像我们使用yield from一样

EN

回答 1

Stack Overflow用户

发布于 2018-04-24 05:33:12

由于described in PEP 525原因,在Python3.6中不支持yield from

虽然理论上可以实现对异步生成器的yield from支持,但需要对生成器实现进行认真的重新设计。

yield from对于异步生成器也不那么重要,因为不需要提供在协程之上实现另一个协程协议的机制。为了组成异步生成器,可以使用一个简单的异步for循环:

async def g1():yield 1 yield 2 async def g2():g1()中v的异步: yield v

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

https://stackoverflow.com/questions/49989861

复制
相关文章

相似问题

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