[英]Aggregating an async generator to a tuple
在嘗試聚合來自異步生成器的結果時,如下所示:
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批准之前,我們還可以允許創建異步生成器表達式。
例子:
- set comprehension:{i async for i in agen()};
- list comprehension:[i asgen in a in agen()];
- dict comprehension:{i:i ** 2 asgen for a in agen()};
- 生成器表達式:(i ** agen()中的i **異步)。
發生了什么,如何將異步生成器聚合成單個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()])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.