python / python/cpython

Clarify that generator containing an async list comprehension becomes an async generator

Abierto
#138,097 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

docs type-bug
Lenguaje dominante
Python
Estrellas
77.2k
Forks
35.9k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Bug report

Bug description:
import asyncio


async def foo():
    print(x for x in [1])  # <generator object foo.<locals>.<genexpr> at 0x...>
    print([a async for a in b] for x in [1])  # <async_generator object foo.<locals>.<genexpr> at 0x...>


asyncio.run(foo())

This happens only if the genexp contains an async listcomp inside of it:

[snip]

This makes sense because the inner listcomp is async and therefore must be evaluated within an async context. It's not clearly documented, though: https://docs.python.org/3.14/reference/expressions.html#generator-expressions says "If a generator expression contains either async for clauses or await expressions it is called an asynchronous generator expression. An asynchronous generator expression returns a new asynchronous generator object, which is an asynchronous iterator (see Asynchronous Iterators)." However, I wouldn't necessarily expect that to include async for expressions in a nested scope. Also, when a genexp includes an async genexp, the outer genexp doesn't become async.

So I'd recommend that you open a CPython bug report to have this clarified in the documentation.

Originally posted by @JelleZijlstra in https://github.com/microsoft/pyright/discussions/10827#discussioncomment-14179632

CPython versions tested on:

3.13

Operating systems tested on:

No response

Linked PRs
  • gh-138105

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con la sección «Generator expressions» de la referencia de expresiones de Python en la URL de documentación enlazada y compara su definición de las expresiones generadoras asíncronas con el ejemplo notificado de una list-comprehension asíncrona anidada. Aclara cuándo la expresión generadora externa se vuelve asíncrona, incluida la distinción con una expresión externa que contiene una expresión generadora asíncrona. Comprueba el issue de CPython relacionado, gh-138105, antes de continuar.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
documentation
Tipo de issue
Documentación
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.