On Fri, Nov 24, 2017 at 4:22 PM, Guido van Rossum
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`.
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