Scope and Ambiguous Assignments In Python
|March 21st, 2011|
Consider the following two Python snippets:
name='Mary' def print_name(): print name print_name() print name
name='Mary' def print_name(): name='John' print_name() print nameThe first will print 'Mary', twice. The second will print 'Mary' once. This happens because while python interprets reads as looking outside the current scope, writes can't be  anything but local. So the assignment to 'name' inside 'print_name' creates a new variable that disappears when the function exits.
So now consider:
name='Mary' def print_name(): print name name='John' print_name() print nameThis code will generate an error:
Traceback (most recent call last): File "tmp.py", line 5, in <module> print_name() File "tmp.py", line 3, in print_name print name UnboundLocalError: local variable 'name' referenced before assignmentThe error is because within a function a variable must be either local or global. If it's local, the 'print name' is illegal because 'name' isn't defined yet. If it's global, the 'name="John"' is illegal because you can't assign outside your scope. So python chooses "local" and decides that the 'print name' line is invalid.
 well, you could use the 'global' keyword
Comment via: r/Python