簡體   English   中英

將異步生成器聚合為元組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM