[Python-ideas] For-loop variable scope: simultaneous possession and ingestion of cake
Terry Reedy
tjreedy at udel.edu
Sat Oct 4 16:18:41 CEST 2008
Greg Ewing wrote:
tement, which will be familiar to nobody.
>
> It's true that with a 'let' statement or equivalent,
> there's no strict need for a change to the for-loop,
> since you can always say
>
> for i in range(10):
> let i = i:
> funcs.append(lambda: i)
>
> But it's an annoying and odd-looking piece of
> boilerplate to have to use, and in that respect is
> similar to the existing solutions of inserting another
> lambda or using a default argument value.
>
> So as a *convenience*, I'm suggesting that the
> for-loop be given automatic let-like behaviour.
Whereas I consider the proposed automaticity to be a grave inconvenience
and confusion factor. What if I *want* a closure to be over variables,
as normal, instead of values.
It seems to me that what you want is fine-grained control over scoping,
or something like that. I would prefer that you overtly propose and
argue for some syntax to do that explicitly, instead of sneaking
something implicit into for-loops.
Or perhaps a different proposal:
Def statements close over variables, as currently.
Lambda expression close over values, as some people seem to expect them
to. This expectation seems to be the crux of the purported 'problem'.
This change would also deal with Guido's example.
Terry Jan Reedy
More information about the Python-ideas
mailing list