[Python-ideas] With clauses for generator expressions

Greg Ewing greg.ewing at canterbury.ac.nz
Sat Nov 17 00:28:34 CET 2012

Nick Coghlan wrote:
> That is, the outermost iterable is evaluated in the *current* scope, not 
> inside the generator.

I've always felt it was a bad idea to bake this kludge into
the language. It sweeps a certain class of problems under the
rug, but only in *some* cases. For example, in

    ((x, y) for x in foo for y in blarg)

rebinding of foo is guarded against, but not blarg. And if
that's not arbitrary enough, in the otherwise completely

    ((x, y) for y in blarg for x in foo)

it's the other way around.

Anyhow, it wouldn't be *impossible* to incorporate a with-clause
into this scheme. Given

    (upper(line) with open(name) as f for line in f)

you either pick open(name) to be the pre-evaluated expression,
or not do any pre-evaluation at all in that case. Either way,
it can't break any *existing* code, because nobody is writing
genexps containing with-clauses yet.


More information about the Python-ideas mailing list