关于python:unboundlocalerror局部变量’i’在赋值之前引用

unboundlocalerror local variable 'i' referenced before assignment

我在python中是个新手,尝试执行以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def dubleIncrement():
    j = j+2

def increment():
    i = i+1
    dubleIncrement()

if __name__ =="__main__":

    i = 0
    j = 0
    increment()
    print i
    print j

但得到这个错误:

1
unboundlocalerror local variable 'i' referenced before assignment

任何人都知道为什么i不是全球性的


在函数内部声明global关键字以访问全局变量,而不是局部变量。即

1
2
3
4
5
6
7
def dubleIncrement():
    global j
    j = j+2

def increment():
    global i
    i = i+1

注意,当你在你的if语句中声明i = 0j = 0时,这是在设置一个全局变量,但是由于它不在任何函数的范围内,所以这里不需要使用global关键字。

理想情况下,您应该尽量避免使用全局变量,并尝试将变量作为参数传递给函数(考虑当您决定在某些其他函数中再次使用变量名ij时会发生什么——可能会发生丑陋的冲突!)。以下是编写代码更安全的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def dubleIncrement(x):
    x = x+2
    return x

def increment(x):
    x = x+1
    return x

if __name__ =="__main__":
    i = 0
    j = 0
    i = increment(i)
    j = dubleIncrement(j)
    print i
    print j