[Python-Dev] Tricky way of of creating a generator via a comprehension expression (original) (raw)
Guido van Rossum guido at python.org
Sat Nov 25 15:27:57 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 Sat, Nov 25, 2017 at 12:17 PM Brett Cannon <brett at python.org> wrote: On Fri, Nov 24, 2017, 19:32 Guido van Rossum, <guido at python.org> wrote:
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
.From the responses it seems that I tried to simplify things too far. Let's say that
await
in comprehensions is fine, as long as that comprehension is contained in anasync def
. While we could saveyield_ _[from]
in comprehensions, I still see it as mostly a source of confusion, and the fact that the presence ofyield [from]
implicitly makes the surroundingdef
a generator makes things worse. It just requires too many mental contortions to figure out what it does. I still propose to rule out all of the above from generator expressions, because those can escape from the surrounding scope. +1 from me On Sat, Nov 25, 2017 at 9:21 AM, Yury Selivanov <yselivanov.ml at gmail.com> wrote:
So we are keeping asynchronous generator expressions as long as they are defined in an 'async def' coroutine?
I would be happy to declare that await
is out of scope for this thread.
It seems that it is always well-defined and sensible what it does in
comprehensions and in genexprs. (Although I can't help noticing that PEP
530 does not appear to propose await
in generator expressions -- it
proposes async for
in comprehensions and in genexprs, and await
in
comprehensions only -- but they appear to be accepted nevertheless.)
So we're back to the original issue, which is that yield
inside a
comprehension accidentally makes it become a generator rather than a list,
set or dict. I believe that this can be fixed. But I don't believe we
should fix it. I believe we should ban yield
from comprehensions and from
genexprs. We don't need it, and it's confused most everyone. And the ban
should extend to yield from
in those same contexts. I think we have a
hope for consensus on this.
(I also think that if we had invented await
earlier we wouldn't have gone
down the path of yield
expressions -- but historically it appears we
wouldn't have invented await
at all if we hadn't first tried yield
and
then yield from
to build coroutines, so I don't think this so bad after
all. :-)
-- --Guido van Rossum (python.org/~guido) -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20171125/25aafc8e/attachment.html>
- 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 ]