- 全局变量 定义在函数外的变量
- 定义在函数内的变量
a = 1
def fun():
b = 2
在上面的代码中,变量a
为全局变量,变量b
为局部变量,a
可以在fun
函数内部访问,但是变量b
无法在函数外被访问
函数中访问全局变量
def fun1():
print(a)
def fun2():
a =3
print(a)
def fun3():
a = a +1
print(a)
a = 1
fun1()
print("fun1 之后a = {}".format(a))
fun2()
print("fun2 之后a = {}".format(a))
fun3()
print("fun3 之后a = {}".format(a))
上面的代码执行结果如下,fun1
函数访问a时,由于没有发现fun1
内部定义变量a
,fun1
继续向外查找变量啊,在全局中发现了a
,即fun1
函数访问的a
为全局变量a
,fun2
函数给a
赋值为3,通过后面的发现,执行完fun2
函数后,全局变量a
的值未发生变化,这实际是因为fun2
函数赋值的a
是局部变量,为fun2
内部新建的一个变量。fun3
函数执行错误是因为python太不智能了,在fun3
中,通过对a变量递增,但是fun3
中没有局部定义变量a
,python就认为错误,因此,为了解决fun2
和fun3
函数的问题,python提供了global
关键字
global关键字
上面说到,如果使用的是赋值语句,在函数内部相当于新建了一个变量,并且重新给了指向,但是有时候我们想把这个变量就是外部的那个全局变量,在赋值操作的时候,就是对全局变量给了重新的指向,这个时候可以通过global关键字表示我在函数里面的这个变量是使用的全局那个。
def fun1():
print(a)
def fun2():
global a
a =3
print(a)
def fun3():
global a
a = a +1
print(a)
a = 1
fun1()
print("fun1 之后a = {}".format(a))
fun2()
print("fun2 之后a = {}".format(a))
fun3()
print("fun3 之后a = {}".format(a))
执行结果如下,这正是我们想要的