我有一个简单的同步代码:
if item:
items = [item]
else:
items = get_items()
for i in items:
# do something
现在,get_items
是一个异步生成器。for i in items
不能与异步生成器一起工作,async for i in items
也不会迭代我的[item]
列表。
有没有一种方法可以迭代一个可以是普通迭代器或异步生成器的变量?
如果没有,我可以创建一个简单地生成这个item
的一行ad-hoc异步生成器吗?
Tags:
不能没有适配器,你必须自己提供。例如:
有了该助手,以下操作将起作用:
^{pr2}$虽然PEP 530定义了异步生成器表达式,但它们在这里没有用处,因为它们需要异步迭代器进行迭代,而这正是我们要创建的。在
虽然从技术上讲不是一个单行线,但一个简单而简短的选择是创建一个生成器并立即实例化它:
^{3}$很容易将其概括为一个助手,例如:
并编写
items = aiter_once(item)
,但这同样要求在代码中的某个地方定义aiter_once
助手。在^{} 包值得一提的是它的流操作符集合,包括^{} ,它创建一个产生单个值的异步流。但是,它需要一个
with
语句来围绕for
循环,这使得它对于您的用例来说是不符合逻辑的。在相关问题 更多 >
编程相关推荐