立即学习:https://edu.csdn.net/course/play/24797/282181?utm_source=blogtoedu
5.2.6 变量作用域
globals()
返回全局范围内所有变量组成的“变量字典”
locals()
返回当前局部范围内所有变量组成的“变量字典”;在全局范围内(函数外)调用,效果同globals()
vars(object)
获取在指定对象范围内所有变量组成的“变量字典”
如果不传入object参数,vars()和locals()的作用完全相同
例:
def test():
age=20
print(age) #直接访问age局部变量>>>20
print(locals()) #访问函数局部范围内的“变量数组”>>>{'age': 20}
print(locals()['age']) #通过函数局部范围内的“变量数组”访问age变量>>>20
locals()['age']=12 #通过locals函数局部范围内的“变量数据”改变age变量的值
print('xxx',age) #再次访问age变量>>>xxx 20
globals()['x'] = 19 #通过globals函数修改x全局变量
test()
x = 5
y = 20
print(globals()) #>>>{…, 'x': 5, 'y': 20}
print(locals()) #在全局范围内使用locals函数,访问的是全局变量的“变量数组”>>>{…, 'x': 5, 'y': 20}
print(x) #直接访问x全局变量>>>5
print(globals()['x']) #通过全局变量的“变量数组”访问x全局变量>>>5
globals()['x'] = 39 #通过全局变量的“变量数组”对x全局变量赋值
print(x) #>>>39
locals()['x'] = 99 #在全局范围内使用locals函数对x全局变量赋值
print(x) #>>>99
例2:访问被遮蔽的全局变量
name = 'A'
def test():
print(globals()['name']) #直接访问name变量,解决局部变量遮蔽全局变量的问题>>>A
name = 'B' #多余的局部变量会导致全局变量被遮蔽
test()
print(name) #>>>A
例3:在函数中声明全局变量
为了避免在函数中对全局变量赋值,可使用global语句来声明全局变量
name = 'A'
def test():
global name #声明name是全局变量
print(name) #>>>A
name = 'B' #不会重新定义局部变量,但会影响全局变量
test()
print(name) #>>>B