[Python-Dev] Tricky way of of creating a generator via a comprehension expression (original) (raw)
Nathaniel Smith njs at pobox.com
Fri Nov 24 20:06:33 EST 2017
- Previous message (by thread): [Python-Dev] Tricky way of of creating a generator via a comprehension expression
- Next message (by thread): [Python-Dev] Tricky way of of creating a generator via a comprehension expression
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, Nov 24, 2017 at 4:22 PM, Guido van Rossum <guido at python.org> wrote:
The more I hear about this topic, the more I think that
await
,yield
andyield from
should all be banned from occurring in all comprehensions and generator expressions. That's not much different from disallowingreturn
orbreak
.
I would say that banning yield
and yield from
is like banning
return
and break
, but banning await
is like banning function
calls. There's no reason for most users to even know that await
is
related to generators, so a rule disallowing it inside comprehensions
is just confusing. AFAICT 99% of the confusion around async/await is
because people think of them as being related to generators, when from
the user point of view it's not true at all and await
is just a
funny function-call syntax.
Also, at the language level, there's a key difference between these
cases. A comprehension has implicit yield
s in it, and then mixing in
explicit yield
s as well obviously leads to confusion. But when you
use an await
in a comprehension, that turns it into an async
generator expression (thanks to PEP 530), and in an async generator,
yield
and await
use two separate, unrelated channels. So there's
no confusion or problem with having await
inside a comprehension.
-n
-- Nathaniel J. Smith -- https://vorpus.org
- Previous message (by thread): [Python-Dev] Tricky way of of creating a generator via a comprehension expression
- Next message (by thread): [Python-Dev] Tricky way of of creating a generator via a comprehension expression
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]