将异步生成器聚合到元组 [英] Aggregating an async generator to a tuple

查看:27
本文介绍了将异步生成器聚合到元组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试聚合异步生成器的结果,如下所示:

async def result_tuple():
    async def result_generator():
        # some await things happening in here
        yield 1
        yield 2
    return tuple(num async for num in result_generator())

我收到一个

TypeError:""Async_Generator""对象不可迭代

执行async for行时。

但是PEP 530似乎建议它应该是有效的:

异步理解

我们建议允许将异步用于内部列表、集合和字典理解。等待PEP 525批准,我们还可以允许创建异步生成器表达式。

示例:

  • 设置理解:{AGEN()中I为I异步};
  • 列表理解:[I Async for I in AGEN()];
  • 字典理解:{i:i**2 AGEN()中的i异步};
  • 生成器表达式:(agen()中i的i**2异步)。

发生了什么,如何将异步生成器聚合到单个tuple中?

推荐答案

在PEP摘录中,理解在同一项目符号列表中并排列出,但生成器表达式与其他理解有很大不同。

没有"tuple理解"这回事。tuple()的参数构成异步生成器:

tuple(num async for num in result_generator())

该行相当于tuple(result_generator())。然后,元组尝试同步迭代生成器,并引发TypeError

不过,正如问题预期的那样,其他理解也会起作用。因此可以通过首先聚合到列表来生成元组,如下所示:

async def result_tuple():
    async def result_generator():
        # some await things happening in here
        yield 1
        yield 2
    return tuple([num async for num in result_generator()])

这篇关于将异步生成器聚合到元组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆