Scope and Ambiguous Assignments In Python |
March 21st, 2011 |
python, tech |
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 [1] 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.
[1] well, you could use the 'global' keyword
Comment via: r/Python