我想弄清楚这个:
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
勘误的格雷格的帖子:
在引用它们之前应该没有.看一看:
x = 1 def explode(): print x # raises UnboundLocalError here x = 2
它会爆炸,即使在引用后指定了x.在Python中,变量可以是本地的,也可以是引用外部范围,并且它不能在一个函数中更改.