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很容易。 如今,你无法确定“全局事物”在哪里被精确定义。