我试图通过省略可变列表和替换理解来改进代码。有一个嵌套的“for”迭代器,其内部是异步的。以下是工作代码:
async def get_accumulator_providers(order: OrderDTO) -> Tuple[str, ...]:
bucket_mapping = await read_config(order)
result = []
for bucket in bucket_mapping:
async for item in dispatch_bucket(order, bucket, bucket_mapping[bucket], frozenset(accumulator_filters)):
result.append(item)
return tuple(result)
但当我使用此代码时:
async def get_accumulator_providers(order: OrderDTO) -> Tuple[str, ...]:
bucket_mapping = await read_config(order)
return tuple(item for bucket in bucket_mapping async for item in
dispatch_bucket(order, bucket, bucket_mapping[bucket], frozenset(accumulator_filters)))
我得到这个错误:
'async_generator' object is not iterable
我的理解有什么问题
正如@VisioN和我发现的here所提到的,问题不是混合异步和同步循环。问题在于使用tuple()连接迭代。使用[]作为列表解决了此问题。实际上,tuple()不是列表理解,而是获取一个生成器并调用“iter”来生成一个tuple。因此,以下代码起作用:
这里的问题是
tuple
使用同步迭代器协议尤鲁·塞利万诺夫回答说:
相关问题 更多 >
编程相关推荐