[Python-Dev] closure semantics

Guido van Rossum guido at python.org
Tue Oct 21 18:51:59 EDT 2003


[Changing the subject.]

[Samuele]
> this is a bit OT and too late, but given that our closed over
> variables are read-only, I'm wondering whether, having a 2nd chance,
> using cells and following mutations in the enclosing scopes is
> really worth it, we kind of mimic Scheme and relatives but there
> outer scope variables are also rebindable. Maybe copying semantics
> not using cells for our closures would not be too insane, and people
> would not be burnt by trying things like this:
> 
> for msg in msgs:
>    def onClick(e):
>      print msg
>    panel.append(Button(msg,onClick=onClick))
> 
> which obviously doesn't do what one could expect today. OTOH as for
> general mutability, using a mutable object (list,...) would allow
> for mutability when one really need it (rarely).

It was done this way because not everybody agreed that closed-over
variables should be read-only, and the current semantics allow us to
make them writable (as in Scheme, I suppose?) if we can agree on a
syntax to declare an "intermediate scope" global.

Maybe "global x in f" would work?

def outer():
    x = 1
    def intermediate():
        x = 2
        def inner():
            global x in outer
            x = 42
        inner()
        print x      # prints 2
    intermediate()
    print x          # prints 42

--Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-Dev mailing list