背景
很多同学对global关键字的使用不太明白,今天就写篇文章给大家梳理一下。
首先讲到global关键字,必须要明白变量的作用域,我们就从变量作用域开始讲。
变量作用域
全局变量:函数外部定义的变量,整个py文件都能使用
局部变量:函数内部定义的变量,仅函数内部使用
global关键字
作用:将局部变量变成全局变量
使用场景:需要跨函数使用变量的时候使用
语法:
使用的时候要先声明再赋值
global variable_name
variable_name = 'values'
使用举例
使用全局变量
def test01():
global test_list
test_list=[1,2,3]
print('test01中打印全局变量内存地址:',id(test_list))
print('test01中打印全局变量test_list=',test_list)
def test02():
test01()
#test_list.append(4)
print('test02中打印全局变量内存地址:',id(test_list))
print('test02中修改全局变量test_list=',test_list)
test02()
输出:
test01中打印全局变量内存地址: 4314080264
test01中打印全局变量test_list= [1, 2, 3]
test02中打印全局变量内存地址: 4314080264
test02中修改全局变量test_list= [1, 2, 3]
结论:
1. 两个函数中打印全局变量内存地址和值一模一样
2. 说明test02使用的确实是test01修饰的全局变量
修改全局变量(全局变量为不可变类型)
def test01():
global test_list
test_str='teststr'
print('test01中打印全局变量内存地址:',id(test_str))
print('test01中打印全局变量test_list=',test_str)
def test02():
test01()
test_str = 'update_teststr'
print('test02中打印全局变量内存地址:',id(test_str))
print('test02中修改全局变量test_list=',test_str)
test02()
输出:
test01中打印全局变量内存地址: 4516881216
test01中打印全局变量test_list= teststr
test02中打印全局变量内存地址: 4517123504
test02中修改全局变量test_list= update_teststr
结论:
1. test01,test02打印全局变量内存地址和值都不一样
2. 说明当global修饰的全局变量为不可变类型时,test02去修改相当于test02创建了一个局部变量
修改全局变量(全局变量为可变类型)
def test01():
global test_list
test_list=[1,2,3]
print('test01中打印全局变量内存地址:',id(test_list))
print('test01中打印全局变量test_list=',test_list)
def test02():
test01()
test_list.append(4)
print('test02中打印全局变量内存地址:',id(test_list))
print('test02中修改全局变量test_list=',test_list)
test02()
输出:
test01中打印全局变量内存地址: 4334141320
test01中打印全局变量test_list= [1, 2, 3]
test02中打印全局变量内存地址: 4334141320
test02中修改全局变量test_list= [1, 2, 3, 4]
结论:
1. test01、test02打印出来的内存地址一样,修改之后打印出来的值不一样
2. 说明test02中修改的确实是全局变量
欢迎来到testingpai.com!
注册 关于