Python全局变量与局部变量
函数里有重复变量名的三种情况
一、重新定义了变量
代码:
a = 100
def test():
a = 200
print('Inside: ',a)
test()
print('Outside: ',a)
输出:
Inside: 200
Outside: 100
可以看到,外部有一个变量a,但函数内重新定义了一个新a,这两个a并不是同一个变量。函数内使用的是其自己定义的局部变量,不影响全局变量。
二、未重新定义直接操作
代码:
a = 100
def test():
a = a + 1
print('Inside: ',a)
test()
print('Outside: ',a)
输出:
UnboundLocalError: local variable 'a' referenced before assignment
直接报错了,此时函数内对a进行运算但未重新定义,test函数仍将其视为局部变量,所以会报“局部变量“a”在赋值前被引用”。但如果把第一句话删除:
a = 100
def test():
print('Inside: ',a)
test()
print('Outside: ',a)
此时输出:
Inside: 100
Outside: 100
此时test未对a进行操作,所以print了全局变量a
三、使用global
代码:
a = 100
def test():
global a
a = a+1
print('Inside: ',a)
test()
print('Outside: ',a)
输出:
Inside: 101
Outside: 101
利用global告诉函数我要用的是全局变量。
总结
如果要用同名局部变量,需要先重新定义赋值。
如果要用全局变量,需要用global申明一下。