为什么嵌套函数可以从外部函数访问variables,但不允许修改它们
在下面的第二种情况下,Python试图寻找一个局部variables。 当它没有find一个,为什么它不能像第一个案例那样在外部范围内看?
这在本地范围内查找x,然后是外部范围:
def f1(): x = 5 def f2(): print x
这给local variable 'x' referenced before assignment
错误local variable 'x' referenced before assignment
:
def f1(): x = 5 def f2(): x+=1
我不允许修改函数f2()的签名,所以我不能传递和返回x的值。 但是,我确实需要一种修改x的方法。 有没有一种方法可以明确告诉Python在外部作用域(类似于global
关键字)寻找variables名?
Python版本:2.7
def f1(): x = { 'value': 5 } def f2(): x['value'] += 1
解决方法是使用可变对象并更新该对象的成员。 有时候,Python的名字绑定是非常棘手的。
在Python 3.x中,这是可能的:
def f1(): x = 5 def f2(): nonlocal x x+=1 return f2
这篇文章给出了Python 2.x的问题和解决scheme。 此外,请阅读PEP 3104了解更多关于此主题的信息。