这个问题已经在这里有一个答案:
- 不明白为什么会发生UnboundLocalError [复制] 8个回答
我想弄清楚这一点:
c = 1
def f(n):
print c + n
def g(n):
c = c + n
f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment
谢谢!
这个问题已经在这里有一个答案:
我想弄清楚这一点:
c = 1
def f(n):
print c + n
def g(n):
c = c + n
f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment
谢谢!
在函数中,被分配变量被视为默认局部变量。 要分配给全局变量,使用global
语句:
def g(n):
global c
c = c + n
这是Python的古怪领域从未真正与我坐井之一。
全球状态的东西,以避免,尤其是需要发生变异它。 考虑如果g()
应该简单地采取两个参数,或者如果f()
和g()
需要与一个共同的类的方法c
实例属性
class A:
c = 1
def f(self, n):
print self.c + n
def g(self, n):
self.c += n
a = A()
a.f(1)
a.g(1)
a.f(1)
输出:
2
3
勘误Greg的帖子 :
应该没有 。 看一看:
x = 1 def explode(): print x # raises UnboundLocalError here x = 2
它爆炸,即使它引用在x分配。 在Python变量可以是本地的或参考范围外,并且它不能在一个函数而改变。
除了什么格雷格说,在Python 3.0,就会有外地语句来陈述“这里是在封闭范围中定义的一些名字”。 与全球那些名字必须在当前范围之外已定义。 这将是很容易追查名和变量。 现在你不能确定,其中“全局的东西”的精确定义。