1.原理
1.全局变量是指函数外定义的,局部是指函数体内定义的;函数内部global 定义的也是全局。
2.全局变量:
- 读操作:函数局部区或者全局区,均可以直接引用。(除非被局部变量屏蔽,想不被屏蔽,用global声明)
- 写操作:想要在函数局部区引用全局变量
1)若全局变量是dict和list (注意tuple本身不可修改),可以直接做append,pop的操作,但是赋值操作必须加global关键字。
2)若全局变量是其他类型,只有赋值操作。在函数内部被赋值需要global 声明
3.局部变量只能在函数内部读和写(一旦在外部使用局部变量就变成创建同名的全局变量,有质的变化)
4.优先级:局部变量>全局变量 { 函数内部若存在同名的局部变量,会屏蔽前面定义的全局变量}
2.代码
-
测试1
name = 'Tim' #全局变量
def f1():
age = 18 #局部变量
print(age,name)def f2():
age=19 #局部变量
print(age,name)f1() #Tim
f2() #Tim -
测试2
name = 'Tim' #全局变量
def f1():
age = 18 #局部变量
global name #定义全局变量
name = 'Eric'
print(age,name)
f1()
print(name) #Eric -
测试3
NAME = ['Tim','mike'] #全局变量
NAME1 = ['Eric','Jeson'] #全局变量
NAME3 = ['Tom','jane'] #全局变量
def f1():
NAME.append('Eric') #列表的append方法可改变外部全局变量的值
print('函数内NAME: %s'%NAME)
NAME1 = '123' #重新赋值不可改变外部全局变量的值
print('函数内NAME1: %s'%NAME1)
global NAME3 #如果需要重新给列表赋值,需要使用global定义全局变量
NAME3 = '123'
print('函数内NAME3: %s'%NAME3)
f1()
print('函数外NAME: %s'%NAME)
print('函数外NAME1: %s'%NAME1)
print('函数外NAME3: %s'%NAME3)
'''
函数内NAME: ['Tim', 'mike', 'Eric']
函数内NAME1: 123
函数内NAME3: 123
函数外NAME: ['Tim', 'mike', 'Eric']
函数外NAME1: ['Eric', 'Jeson']
函数外NAME3: 123
'''