这个问题在这里已经有答案了:

我想弄清楚这一点:

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中,变量可以是本地变量,也可以引用外部作用域,并且不能在一个函数中更改。

除了 Greg 所说的之外,在 Python 3.0 中,还会有 nonlocal 语句来声明“这里是在封闭范围中定义的一些名称”。与全局不同的是,这些名称必须已经在当前范围之外定义。追踪名称和变量将很容易。如今,您无法确定“全局某物”的确切定义在哪里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top