> > On Sat, Nov 25, 2017 at 12:17 PM Brett Cannon <br...@python.org> wrote: > On Fri, Nov 24, 2017, 19:32 Guido van Rossum, <gu...@python.org> wrote: >> >>> On Fri, Nov 24, 2017 at 4:22 PM, Guido van Rossum <gu...@python.org> >>> wrote: >>> >>>> The more I hear about this topic, the more I think that `await`, >>>> `yield` and `yield from` should all be banned from occurring in all >>>> comprehensions and generator expressions. That's not much different from >>>> disallowing `return` or `break`. >>>> >>> >>> 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 an `async def`. While we *could* save `yield >>> [from]` in comprehensions, I still see it as mostly a source of confusion, >>> and the fact that the presence of `yield [from]` *implicitly* makes the >>> surrounding `def` 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...@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)
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com