python - 使用 AsyncGenerator 或 AsyncIterator 键入的区别?

Yoh*_*ace 2 python iterator asynchronous generator python-typing

我创建了一个完全类型化的不和谐异步库。我有一个从 aiohttp get 请求创建对象的方法,如下例所示:

async def get_bans(self):
    """|coro|
    Fetches all the bans in the guild.
    """
    data = await self._http.get(f"guilds/{self.id}/bans")
    for ban_data in data:
        yield Ban.from_dict(construct_client_dict(self._client, ban_data))
Run Code Online (Sandbox Code Playgroud)

我想知道这个代码片段的返回类型以及它是否应该是 aAsyncGenerator[Ban, None]AsyncIterator[Ban, None]。老实说,我一直在寻找一些信息,我可以找到任何能让我对这个主题有清晰想法的信息。

小智 6

官方文档对AsyncIterator的描述 是:

...提供__aiter____anext__方法...

AsyncGenerator从文档引向PEP525

...生成器是任何包含一个或多个yield表达式的函数...

调用异步生成器函数的结果是异步生成器对象...

异步生成器定义了这两种方法 (__aiter____anext__)

所以我认为,因为yield在你的函数中最好使用AsyncGenerator.