关于python:local(?)赋值前引用的变量

Local (?) variable referenced before assignment

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
local var referenced before assignment
Python 3: UnboundLocalError: local variable referenced before assignment

1
2
3
4
test1 = 0
def testFunc():
    test1 += 1
testFunc()

我收到以下错误:

UnboundLocalError: local variable 'test1' referenced before assignment.

错误表明'test1'是局部变量,但我认为这个变量是全局变量。

那么,它是全局的还是局部的,如何在不将全局test1作为参数传递给testFunc的情况下解决这个错误呢?


为了在函数内部修改test1,需要将test1定义为全局变量,例如:

1
2
3
4
5
test1 = 0
def testFunc():
    global test1
    test1 += 1
testFunc()

但是,如果只需要读取全局变量,则可以不使用关键字global打印它,如下所示:

1
2
3
4
test1 = 0
def testFunc():
     print test1
testFunc()

但是,每当需要修改全局变量时,必须使用关键字global


最佳解决方案:不要使用globals

1
2
3
4
5
6
7
>>> test1 = 0
>>> def test_func(x):
        return x + 1

>>> test1 = test_func(test1)
>>> test1
1


您必须指定test1是全局的:

1
2
3
4
5
test1 = 0
def testFunc():
    global test1
    test1 += 1
testFunc()