On 22 November 2017 at 15:56, Yury Selivanov <yselivanov...@gmail.com> wrote: > "await" in generator expressions works *correct*. I explained it here: > https://bugs.python.org/issue32113 > > To clarify a bit more: > > r = (V for I in X) > > is equivalent to: > > def _(): > for I in X: > yield V > r = _()
The docs don't actually say that this equivalence is definitive. There's a lot of vagueness - possibly because the equivalence wasn't precise in 2.X (due to name leakage) and it wasn't updated to say that comprehensions are now defined *precisely* in terms of this equivalence. But surely this means that: 1. await isn't allowed in comprehensions/generator expressions, because the dummy function (_ in your expansion above) is not a coroutine function. 2. yield expressions in a comprehension.generator will yield extra values into the generated list (or the stream returned from the generator epression). That seems wrong to me, at least in terms of how I'd expect such an expression to behave. So I think there's a problem with treating the equivalence as the definition - it's informative, but not normative. > Making 'await' a SyntaxError is absolutely not an option. Async > generator expressions are a shorthand syntax for defining asynchronous > generators (PEP 525), and it's already being used in the wild. But by the logic you just described, await isn't (or shouldn't be) allowed, surely? Paul _______________________________________________ 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