1 定义
全局变量指的是在整个python文件中定义的变量,而局部变量是在函数内部定义的变量。
a = 1
def yang_func():
b = 2
从以上代码中可以看出,变量a是全局变量,变量b是定义在yang_func()函数的内部,因此b是局部变量。
2 使用范围
顾名思义,全局变量可以在定义该变量的python文件的全局使用,而局部变量只能在定义该变量的函数内部使用,代码如下所示。
a = 1
def yang_func():
b = 2
print(b)
print(a)
需要注意的是,可以在局部(函数)范围内使用全局变量,但是不能在全局(python文件)范围内使用局部变量,代码如下所示。
a = 1
def yang_func():
b = a
print(b)
以上代码中,yang_func()函数中使用了全局变量a,此时b的值与a的值相同,都是1。
def yang_func():
b = 2
yang_func()
print(b)
在以上代码中,b是局部变量,在全局范围内使用该变量时,程序会报错,报错信息如图1所示。
图1 报错信息
该信息的含义是变量b没有定义,也就是说不能在全局范围内使用局部变量。
3 当全局变量与局部变量同名时
当全局变量与局部变量同名时,依然是互不影响的两个变量,代码如下所示。
a = 1
def yang_func():
a = 2
print(a)
yang_func()
print(a)
在以上代码中,全局变量a与局部变量a同名,此时,在yang_func()中操作的是局部变量a,对全局变量a的值是没有影响的。因此,调用yang_func()函数输出的是局部变量a的值,即为2,之后打印的是全局变量a的值,即为1。
4 全局变量不能在函数中修改
在“2 使用范围”中提到,可以在局部(函数)范围内使用全局变量,但是不能在局部范围内修改全局变量。
a = 1
def yang_func():
a += 2
在以上代码中,a是全局变量,在yang_func()即局部中,对该变量的值进行修改,此时程序报错,报错信息如图2所示。
图2 报错信息
该信息的含义是“不能访问局部变量a,因为a没有和任何值相关联”,也就是说,在yang_func()内部在修改全局变量a的值是, 是把a当成了局部变量,但是a本身又不是局部变量,所以程序会报错,也就是说,只能在局部范围内修改局部变量的值,而不能修改全局变量的值。
5 global的用法
global是Python的关键字,其中文意思就是“全局的”。通过global关键字可以将变量声明为全局变量。
5.1在局部中改变全局变量的值
在“4 全局变量不能在函数中修改”中提到,不能在局部中修改全局变量的值。通过global则可以实现该功能,代码如下所示。
a = 1
def yang_func():
global a
a += 2
yang_func()
print(a)
在yang_func()函数中,使用global通知编译器,a是全局变量而不是局部变量,此时就可以在局部中修改全局变量a的值,最后输出的a值是3。
5.2 在局部中定义全局变量
在“1 定义”中提到,定义在局部(函数)中的变量是局部变量,可以通过global在局部中定义全局变量,代码如下所示。
def yang_func():
global b
b = 2
yang_func()
print(b)
此时,变量b虽然在yang_func()中定义,但是因为有global修饰,因此b是全局变量,此时打印出b的值是2。