Nested Scopes in Idle/PythonWin

Tim Peters tim.one at home.com
Sun Apr 22 16:19:27 EDT 2001


[Greg Chapman]
> No, I'm talking about the interactive interpreter:
>
> Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit (Intel)] on win32
> Type "copyright", "credits" or "license" for more information.
> IDLE 0.8 -- press F1 for help
> >>> def make_adder(x):
>         return lambda y: x+y
> SyntaxError: local name 'x' in 'make_adder' shadows use of 'x' as
>    global in nested scope 'lambda' (<pyshell#1>, line 1)

[Jeremy Hylton]
> You didn't tell the interpreter that you wanted to use nested scopes.
>
> >>> from __future__ import nested_scopes
> >>> def make_adder(x):
> ...	return lambda y: x + y
> ...
> >>>

Greg is using IDLE, not a cmdline Python, and it doesn't work in IDLE.  This
has been listed as an unresolved issue in PEP 236 all along:

Unresolved Problem: Simulated Interactive Shells

    Interactive shells "built by hand" (by tools such as IDLE and
    Emacs Python-mode) should behave like native interactive shells
    (see above).  However, the machinery used internally by native
    interactive shells has not been exposed, and there isn't a clear
    way for tools building their own interactive shells to achieve
    the desired behavior.

That's still the case (else I would have updated the PEP to say something
else there <wink>).






More information about the Python-list mailing list