> From: John Williams [mailto:jrw at pobox.com] > > I can think of two reasonable possibilities--either it refers to the > innermost possible variable, or the compiler rejects this > case outright. > Either way the problem is easy to solve by renaming one of > the variables. Going on the principle of least surprise, I have to say that I think explicitly naming the scope in which a variable is to be used is the best approach. My concern with the other proposal is that introducing code between scopes could silently change the semantics of a piece of code. I'll use the 'outer' proposal since it's the shortest and least confusing to me ... def func1() x = 1 def func2() def func3() outer x x += 2 return func3 return func2() print func1() should print: 3 Now, if we change it to: def func1() x = 1 def func2() x = 2 def func3() outer x x += 2 return func3 return func2() print func1() it would now print: 4 OTOH, specifying the scope prevents this type of error: def func1() x = 1 def func2() def func3() global x in func1 x += 2 return func3 return func2() print func1() and def func1() x = 1 def func2() x = 2 def func3() global x in func1 x += 2 return func3 return func2() print func1() should both print 3 'global x in func1' is also a *lot* easier to explain. I think these two points should weigh heavily in any decision. I think the need to rename the target scope is of lesser importance. Tim Delaney
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4