[Python-ideas] For-loop variable scope: simultaneous possession and ingestion of cake
Dillon Collins
dillonco at comcast.net
Sat Oct 4 03:00:22 CEST 2008
On Friday 03 October 2008, Greg Ewing wrote:
> My next step would be to propose a 'let' statement
> for dealing with things like that:
>
> for i in range(3):
> let j = str(i):
> funs.append(lambda: j)
>
> The 'let' statement would do the same thing for its
> variable as the for-loop, but in a one-off fashion.
Well now, that seems more than a little ridiculous. If we're going to be
creating a keyword that rescopes variables, why not just use that instead of
messing with the for loop. Seems like that would be a generally more useful
solution anyway.
Perhaps instead:
for i in range(10):
j = str(i)
scope i, j:
funs.append(lambda: (j,i))
> > Some of those languages can bind the variable value early, so if
> >
> > you were to write the equivalent of:
> > >>> i= 3
> > >>> f= lambda: i
> > >>> i= 4
>
> Can you give me an example of an imperative language that
> behaves that way? I don't think I've ever seen one.
>
> (Note that the above would be illegal in any functional
> (i.e. side-effect-free) language, since the syntax doesn't
> allow you to express rebinding an existing variable.)
How about C?
int i;
int get(void) {return i;}
int main()
{
i=3;
get()
i=4;
}
I think the confusion is the fact that the a local scope is effectively a
_global_ scope in locally defined functions. It's really a rather
conceptually elegant setup, though a tad confusing. Perhaps that's because
we're used to seeing globals as "the global scope" rather than "all
encompassing scopes".
More information about the Python-ideas
mailing list