7 ms·
I'm probably naive for even asking, but why would you want to be able to change the value of x in the enclosing scope, unless you passed in a reference to it to
by count 16y ago
I'm probably naive for even asking, but why would you want to be able to change the value of x in the enclosing scope, unless you passed in a reference to it to g() (which doesn't exactly even work, as Str and numericals are immutable). If you had to change the value of X, make it a return value of G and assign that within the enclosing scope.
I view this as a benefit - less accidental stamping on variables/etc. I wouldn't consider myself A+ #1 programmer by any stretch though. This sort of thing seems like it would enable too many 'side effects' though.
- zephyrfalcon 16y agoLispy languages like to use this construct for all kinds of purposes. See the appendix at the end of http://paulgraham.com/icad.html http://paulgraham.com/icad.html for examples. You can do this in Python too, but it requires a bit more work. Python is asymmetrical here; you can see a variable in an enclosing scope, and if it's a mutable object you can change it, but you cannot reassign the name.
- koenigdavidmj 16y agoPython 3 lets you use the statement 'nonlocal varname' and it will grab it from the outer scope, as well.
- zephyrfalcon 16y agoAh, yes. I should have mentioned that I was talking about Python 2.x.