python – ¿Cuál es la diferencia entre escribir con AsyncGenerator o AsyncIterator?
Estoy creando una biblioteca asincrónica de Discord que está completamente tipada.
Tengo un método que crea objetos a partir de solicitudes de obtención de aiohttp, como el siguiente ejemplo:
async def get_bans(self):
'''
|coro|
Obtiene todas las prohibiciones en el gremio.
'''
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))
Me preguntaba sobre el tipo de retorno de este fragmento de código y si debería ser un AsyncGenerator[Ban, None]
o un AsyncIterator[Ban, None]
. Para ser honesto, he estado buscando un poco y no pude encontrar ninguna información que me diera una idea clara sobre el tema.
davy.ai
Como experto en TI especializado en Python y escribir código, el tipo de retorno del fragmento de código proporcionado debería ser
AsyncIterator[Ban]
.Un generador asíncrono es un tipo de iterador asíncrono que produce una secuencia de valores de forma asíncrona. Utiliza la declaración
async for
para obtener los valores del generador asíncrono. Sin embargo, en el fragmento de código dado, se utiliza la declaraciónyield
para producir y devolver valores individuales uno a la vez. Por lo tanto, en este caso es más adecuado un iterador asíncrono.Además, no es necesario incluir
None
como segundo parámetro de tipo para iteradores o generadores que no tienen un tipo de retorno. Por lo tanto, el tipo de retorno simplemente puede serAsyncIterator[Ban]
.