Python范围

我想弄清楚这一点:

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 

谢谢!

在一个函数中,分配给的variables默认被视为局部variables。 要分配给全局variables,请使用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() af(1) ag(1) af(1) 

输出:

 2 3 

勘误表格雷格的post :

在被引用之前不应该 。 看一看:

 x = 1
 def explode():
     print x#在这里引发了UnboundLocalError
     x = 2

它会爆炸,即使在被引用之后分配了x。 在Python中,variables可以是本地的,也可以是引用外部的范围,在一个函数中不能改变。

除了Greg所说的,在Python 3.0中,将会有非局部语句来声明“这里是一些在封闭范围内定义的名字”。 与全球不同,这些名称必须已经在当前范围之外定义。 追踪名称和variables很容易。 如今,你无法确定“全局事物”在哪里被精确定义。