[Python-Dev] Tricky way of of creating a generator via a comprehension expression

Paul Moore p.f.moore at gmail.com
Wed Nov 22 11:19:29 EST 2017


On 22 November 2017 at 15:56, Yury Selivanov <yselivanov.ml at gmail.com> wrote:
> For synchronous generator expression:
>
>    r = (f(i) for i in range(3))
>
> is really:
>
>    def _():
>       for i in range(3):
>         yield f(i)
>    r = _()
>
> For an asynchronous generator expression:
>
>    r = (await f(i) for i in range(3))
>
> is equivalent to:
>
>    def _():
>       for i in range(3):
>         yield (await f(i))
>    r = _()

Wait, I missed this on first reading. The note in the docs for
generator expressions defining asynchronous generator expressions is
*incredibly* easy to miss, and doesn't say anything about the
semantics (the expansion you quote above) being different for the two
cases. This definitely needs clarifying in the docs.

Paul


More information about the Python-Dev mailing list