@@ -310,10 +310,10 @@ the iterable expression in the leftmost :keyword:`!for` clause, it is called an
310310execution of the coroutine function in which it appears.
311311See also :pep: `530 `.
312312
313- Note that this behavior extends to nested comprehensions : if a comprehension
314- contains an asynchronous comprehension in a nested scope, the outer comprehension
315- implicitly becomes asynchronous. This also applies to generator expressions that
316- contain asynchronous comprehensions .
313+ Note that this behavior extends to nested scopes : if a comprehension or generator
314+ expression contains asynchronous comprehensions (but not asynchronous generator
315+ expressions) in nested scopes, the outer comprehension or generator expression
316+ implicitly becomes asynchronous .
317317
318318.. versionadded :: 3.6
319319 Asynchronous comprehensions were introduced.
@@ -489,16 +489,21 @@ clauses or :keyword:`await` expressions it is called an
489489expression returns a new asynchronous generator object,
490490which is an asynchronous iterator (see :ref: `async-iterators `).
491491
492- Note that a generator expression becomes an asynchronous generator expression
493- if it contains asynchronous comprehensions in nested scopes, such as an async
494- list comprehension within the generator expression . For example::
492+ Note that a generator expression also becomes an asynchronous generator expression
493+ if it contains asynchronous comprehensions (list, set, or dict comprehensions with
494+ :keyword: ` !async for `) in nested scopes . For example::
495495
496496 # This becomes an async generator expression
497497 ([a async for a in async_iterable] for x in [1])
498498
499- This behavior occurs because the inner async comprehension requires an
500- asynchronous context to execute, which causes the entire generator expression
501- to become asynchronous.
499+ However, a generator expression that contains an asynchronous generator expression
500+ does *not * become asynchronous itself::
501+
502+ # This remains a regular generator expression
503+ ((a async for a in async_iterable) for x in [1])
504+
505+ This distinction exists because async comprehensions require immediate evaluation
506+ in an async context, while async generator expressions are lazily evaluated.
502507
503508.. versionadded :: 3.6
504509 Asynchronous generator expressions were introduced.
0 commit comments