On 23 November 2017 at 05:44, Greg Ewing <greg.ewing@canterbury.ac.nz> wrote:
Ivan Levkivskyi wrote:
The key idea is that neither comprehensions nor generator expressions should create a function scope surrounding the `expr`

I don't see how you can avoid an implicit function scope in
the case of a generator expression, though. And I can't see
how to make yield in a generator expression do anything
sensible.

Consider this:

   def g():
      return ((yield i) for i in range(10))

Presumably the yield should turn g into a generator, but...
then what? My brain is hurting trying to figure out what
it should do.


I think this code should be just equivalent to this code

    def g():
        temp = [(yield i) for i in range(10)]
        return (v for v in temp)

Semantics of the comprehension should be clear here (just an equivalent for-loop without name leaking)

--
Ivan