[Python-ideas] Tweaking closures and lexical scoping to include the function being defined

Carl Matthew Johnson cmjohnson.mailinglist at gmail.com
Tue Sep 27 08:34:39 CEST 2011

On Sep 26, 2011, at 7:05 PM, Greg Ewing wrote:

> For example, when someone writes
>    for i in things:
>        def f():
>          dosomethingwith(i)
>        squirrelaway(f)
> and get surprised by the result, he's effectively
> assuming that the for-loop creates a new binding for
> i each time around. He may not *realise* he's assuming
> that, but he is.

For the record, I remember being surprised when I learned that for doesn't create a new scope.

This seems like a kind of Python 4000 feature though… At the very least you'd need to preserve the ability to use "old-style" for-loops by writing something like,

i = None
for i in things:

if i is not None: print("Processed one or more things...")

-- Carl Johnson 

More information about the Python-ideas mailing list