def mul2():
a = 7
b = 9
c = a*b
print (c)
如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量,代码如下:
#第1章/hanshu.py
a = 10 #全局变量
def test1():
a = 30
print('test1中的变量a的值:', a)
a = 70
print('test1中的变量a修改后的值:', a)
def test2():
print('test2中的变量a的值:', a)
test1()
test2()
test1中的变量a的值: 30 test1中的变量a修改后的值: 70 test2中的变量a的值: 10
如上述代码所示,第一行定义在函数外面的是一个全局变量。
注意,上述代码出现了全局变量和局部变量名字相同问题,即在函数test1中是局部变量。
如果全局变量的名字和局部变量的名字相同,那么函数中使用的是局部变量的,
记忆小技巧:强龙不压地头蛇。
此外,全局变量不仅能够在所有的函数中进行使用,我们也可以使用关键字global在函数中指定修改全局变量,代码如下:
#第1章/hanshu.py
a = 10 #全局变量
def test1():
global a
print('test1中的变量a的值:', a)
a = 70
print('test1中的变量a修改后的值:', a)
def test2():
print('test2中的变量a的值:', a)
test1()
test2()
test1中的变量a的值: 10 test1中的变量a修改后的值: 70 test2中的变量a的值: 70
对于不可变的数据类型来说(数字、字符串、元组),如果不指定修改全局变量,就尝试在函数中定义全局变量会引起报错,代码如下:
#第1章/hanshu1.py
a = 1 #定义全局变量
def f():
global a
a += 1
print (a)
f() #执行函数
2
在函数中不使用global声明全局变量时,不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。
对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
对于可变类型的全局变量来说(列表、字典、集合),因其指向的数据可以修改,所以不使用global时也可修改全局变量,代码如下:
#第1章/hanshu.py
lst = [1,]
def f2():
lst.append(7)
print (lst)
f2()
[1, 7]