Why nested functions can access variables from outer functions, but are not allowed to modify them
python, python-2.x, scope
Solution
def f1():
x = { 'value': 5 }
def f2():
x['value'] += 1
Workaround is to use a mutable object and update members of that object. Name binding is tricky in Python, sometimes.
Problem
In the 2nd case below, Python tries to look for a local variable. When it doesn't find one, why can't it look in the outer scope like it does for the 1st case? This looks for x in the local scope, then outer scope: ``` def f1(): x = 5 def f2(): print x ``` This gives `local variable 'x' referenced before assignment` error: ``` def f1(): x = 5 def f2(): x+=1 ``` I am not allowed to modify the signature of function f2() so I can not pass and return values of x. However, I do need a way to modify x. Is there a way to explicitly tell Python to look for a variable name in the outer scope (something similar to the `global` keyword)? Python version: 2.7