[Python-Dev] Re: closure semantics

Zack Weinberg zack at codesourcery.com
Thu Oct 23 17:58:54 EDT 2003


Skip Montanaro <skip at pobox.com> writes:

>     John> How about (to abuse a keyword that's gone unmolested for too long)
>
>     John>    global foo from def
>
>     John> to declare that foo refers a variable in a lexically enclosing
>     John> function definition?  This avoids to need to name a specific
>     John> function (which IMHO is just a source of confusion over the
>     John> semantics of strange cases) while still having some mnemonic value
>     John> (foo "comes from" an enclosing function definition).
>
> How do you indicate the particular scope to which foo will be bound (there
> can be many lexically enclosing function definitions)?  Using my example
> again:
>
>     def outer(a):
>         x = a
>         def inner(a):
>             x = 42
>             def innermost(r):
>                 global x from def       # <--- your notation
>                 x = r
>             print "  inner, x @ start:", x
>             innermost(random.random())
>             print "  inner, x @ end:", x
>         print "outer, x @ start:", x
>         inner(a)
>         print "outer, x @ end:", x
>
> how do you tell Python that x inside innermost is to be associated with the
> x in inner or the x in outer?

Maybe "global foo from <function_name>" ?  Or, "from function_name
global foo" is consistent with import, albeit somewhat weird.


I would never use this feature; I avoid nested functions entirely. 
However, as long as we're talking about this stuff, I wish I could
write "global foo" at module scope and have that mean "this variable
is to be treated as global in all functions in this module".

zw



More information about the Python-Dev mailing list