在下面的第二种情况下,Python试图寻找一个局部变量。当它没有找到一个,为什么它不能像第一种情况那样在外部范围内看?为什么嵌套函数可以访问来自外部函数的变量,但不允许修改它们
这看起来对于x在局部范围内,那么外部范围:
def f1():
x = 5
def f2():
print x
这给local variable 'x' referenced before assignment
错误:
def f1():
x = 5
def f2():
x+=1
我不允许修改函数f2()的签名等等我无法传递并返回x的值。但是,我确实需要一种修改x的方法。有没有一种方法可以明确告诉Python在外部范围内寻找变量名(类似于global
关键字)?
Python版本:2.7
python 3为此提供了'nonlocal',但我认为值得问为什么你需要这样做。这比使用'global'更安全,但仍然感觉不对。 – mgilson 2012-08-16 12:52:23
@mgilson有很多很好的理由可以做到这一点, pep-3104中的基本部分。 – thebjorn 2012-08-16 12:58:48
你使用什么版本的python? – soulcheck 2012-08-16 13:00:17