python全局变量释疑
python全局变量 是定义在函数之外的变量
函数可以使用全局变量的值
但是如果想在函数里改变全局变量的值 需要提前声明
这三句话不好理解 直接上代码
- 示例一
num = 0 #定义在函数以外 对于函数来说 这就是全局变量
def test():
a = 1
num = a + 2 #函数会认为这是局部变量num 而不是全局变量num
print(num)
test()
print(num)
结果为
3
0
第一个结果是函数里的print(num),因为这个num在函数test里被赋值,函数会认为这是属于函数自己的局部变量,所以运算结果为2.
第二个结果打印的是全局变量num,并没有被函数引用,所以也没有变化
- 示例二
num = 0 #定义在函数以外 对于函数来说 这就是全局变量
def test():
num = num +1
print(num)
test()
运行上边代码会报错:
UnboundLocalError: local variable 'num' referenced before assignment
意思是变量num 在赋值之前被使用,为什么会这样,看下边的例子
- 示例三
num = 0 #定义在函数以外 对于函数来说 这就是全局变量
def test():
x = num +1 #函数在内部没有找到被赋值的变量num,就去全局变量里找num,所以此处的num为引用的全局变量num值为0, X是此函数的局部变量
print(x)
test()
print(num)#打印全局变量的值
运行这个代码 能得到结果
1
0
从这里可以看出,全局变量num被函数test()引用了,并参加了计算得到一个新的值付给了函数的局部变量X。
- 示例四
num = 0 #定义在函数以外 对于函数来说 这就是全局变量
def test():
global num #声明函数里使用的num 是全局变量
num = num +1 #此函数里没有定义变量num 所以直接调用全局变量里的num
print(num)
test()
print(num)#在函数里经过了声明 全局变量的 值也被改变了 此时num =1
这个代码也能够成功运行 结果为
1
1
在函数里使用关键字 global 声明过全局变量之后,在对其进行运算,全局变量的值会被改变
- 示例五
num = 0 #定义在函数以外 对于函数来说 这就是全局变量
def test():
num = num +1 #此函数里没有定义变量num 所以直接调用全局变量里的num
global num #声明全局变量
print(num)
test()
print(num)
这个运行也会报错
SyntaxError: name 'num' is used prior to global declaration
意思是全局变量num在声明之前被使用
跟示例二的报错还不一样,因为这里虽然声明了,却是在使用之后声明的,也是不对的。应该在使用之前被声明
- 结论
由示例二能看出,函数在遇到没被赋值的变量时,会自己去全局变量里找,并把其值导入函数参与运算,但如果想要改变全局变量的值,使用前必须要在函数里进行声明,声明这个变量是全局变量。