Odd closure issue for generators

Brian Quinlan brian at sweetapp.com
Fri Jun 5 03:34:41 CEST 2009


Gabriel Genellina wrote:
> En Thu, 04 Jun 2009 18:40:07 -0300, Brian Quinlan <brian at sweetapp.com> 
> escribió:
> 
>> This is from Python built from the py3k branch:
> 
> It's not new; same thing happens with 2.x
> 
> A closure captures (part of) the enclosing namespace, so names are 
> resolved in that environment even after the enclosing block has finished 
> execution.
> As always, the name->value evaluation happens when it is required at 
> runtime, not earlier ("late binding"). So, in the generator expression 
> (lambda : i for i in range(11, 16)) the 'i' is searched in the enclosing 
> namespace when the lambda is evaluated, not when the lambda is created.

OK, I talked myself into agreeing that it is better for the generator 
comprehension to share a context amongst every enclosed generator 
expression (rather than having one context per generator expression) for 
consistency reasons.

Thanks!

Cheers,
Brian



More information about the Python-list mailing list