
With "var":
var a = 3 def f(): var b = 4 def g(): var c = 5 a, b, c = 0, 1, 2 # changes outer a, outer b, and c g() f()
Now i think this is a little bit weird, because the statement "var b = 4" in an outer scope changes the meaning of "b" in an inner scope. But it does have the virtue of retaining behaviour compatible with today's Python, while offering a way to get proper lexical scopes for those who want to use them.
Thoughts? Other ideas?
Maybe an object, like self, for referring to enclosing scopes? a = 3 def f(): b = 4 def g(): c = 5 outer.outer.a, outer.b, c = 0, 1, 2 # changes outer a, outer b, and c g() f() Chaining the keyword looks a little weird, but it is not often that you have to refer to variables in the enclosing scope of the enclosing scope. I have often wanted something similar to that for global variables, instead of the global declaration: cache = None def init(): if not global.cache: global.cache = init_cache() -- mvh Björn