Python 范围:"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 中,变量可以是局部的,也可以是外部作用域,并且它不能在一个函数中更改。

除了 Greg 所说的之外,在 Python 3.0 中,还会有非本地语句声明"这里有一些在封闭作用域中定义的名称"。与全局名称不同,这些名称必须在当前范围之外定义。追踪名称和变量将很容易。如今,您无法确定"全局事物"的确切定义。

相关内容

最新更新