局部变量
什么是局部变量
通俗定义:函数内部定义的变量就叫局部变量。
话不多说,代码如下:
def test1(): a = 300 # 定义一个局部变量a,并初始化300 print("--test1--修改前:a=%s" % a) a = 200 # 给变量a重新赋值200 print("--test1--修改后:a=%s" % a) def test2(): a = 400 # 定义另一个局部变量a,并初始化400 print("--test2--修改后:a=%s" % a) # 分别调用函数test1,test2 test1() test2()
输出:
--test1--修改前:a=300
--test1--修改后:a=200
--test2--修改后:a=400
结论:
- 局部变量就是在函数内部定义的变量。
- 不同的函数内部可以定义名字相同的变量,但它们不会产生影响。
- 局部变量的作用,为了临时保存数据需要在需要在函数中定义变量来进行存储。
全局变量
什么是全局变量
定义:如果一个变量既能在一个函数中使用,也可以在其他函数中使用,这样的变量就是全局变量。
代码如下:
a = 100 # 定义一个全局变量a,并初始化为100 # 分别定义函数test1、test2,功能是打印变量a的值 def test1(): print(a) def test2(): print(a) test1() test2() """ 结果如下: 100 100 """
如何修改全局变量的值
首先,我们可能是这样想的:
a = 100 # 定义一个全局变量a,并初始化为100 # 分别定义函数test1、test2 def test1(): print("修改前:a=%s"%a) a = 300 print("修改后:a=%s"%a) def test2(): print(2) test1() test2() """
结果如下:
UnboundLocalError: local variable 'a' referenced before assignment
异常解释:局部变量a在被引用前没有被定义
""" 那我们把函数test1中的内容修改如下: def test1(): # print("修改前:a=%s"%a) a = 300 print("修改后:a=%s"%a) """ 结果如下: 修改后:a=300 100 """
这次我们发现,错误消失了,函数test2中打印变量a的值并没有改变还是100,这是为什么呢?
原因:如果一个全局变量在函数内被重新定义过,再在函数内使用变量则默认为局部变量;如果在函数内没有被定义,直接使用会被视为全局变量。
此时,函数test1中的只是定义了一个名字相同的局部变量而已,并没有改变全局变量的值。
global的使用
这前我们想的法子都不能修改全局变量的值,这下就该认识一个新的关键字 global ,它的功能就是如果需要在函数内定义(修改)全局变量,则要先用global进行声明。
把之前的代码修改如下:
a = 100 # 定义一个全局变量a,并初始化为100 # 分别定义函数test1、test2 def test1(): global a # 声明函数中使用的a是全局变量 print("修改前:a=%s" % a) a = 300 print("修改后:a=%s" % a) def test2(): print(2) test1() test2() """ 结果如下: 修改前:a=100 修改后:a=300 300 """
这下终于修改成功了。
可变类型与不可变类型的全局变量
发现我们之前定义的全局变量是数字类型,是属于不可变类型的,那么修改一个可变类型的全局变量有什么不同呢?
a = [100, 200] # 定义一个列表全局变量a # 分别定义函数test1、test2 def test1(): print("修改前:a=%s" % a) a.append(300) print("修改后:a=%s" % a) def test2(): print(a) test1() test2() """ 结果如下: 修改前:a=[100, 200] 修改后:a=[100, 200, 300] [100, 200, 300] """
我们发现当全局变量为可变类型时,即使我们不是用global关键字声明全局变量,它还是会被修改。
事实上:
- 在函数中不是用global声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。
- 对于不可变类型的全局变量来说,因其指向的数据不能被修改,所以不是用global时无法修改全局变量。
- 对于可变类型的全局变量来说,因其指向的数据可以改变,所以不用global时可以修改全局变量。
总结
以上所述是小编给大家介绍的python的局部变量和全局变量,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 《绝对主打 流行原创金曲 2CD》[WAV分轨][1.1GB]
- 《赛博朋克2077》更新上线:支持AMD FSR3
- 《塞尔达传说:智慧的再现》提前半个月偷跑,引发玩家担忧
- 战锤40K星际战士2全职业介绍|全职业技能效果一览
- 陈百强《2006世纪10星·永恒篇[环球]》[WAV整轨]
- 【新世纪钢琴】VA-GoldenOctober(Piano)(金秋十月钢琴篇)【FLAC】
- 青稞荞麦《破茧》新生代组合[WAV+CUE]
- 因系统升级后出现BUG 《FF16》PS5完全版宣布延期
- 《黑神话:悟空》周伯通!大佬用左右手分别挑战两只虎先锋
- 《黑神话:悟空》攻击动作致敬《大话西游》:这也太帅了!
- 《星舰铳犬太阳系物语》游戏背景介绍
- 《战锤40K星际战士2》终极版有后续DLC说明
- 《第9层》游戏特色玩法介绍
- 刀郎.2006-刀郎【九雨天下】【WAV+CUE】
- 59.9高校生.1994-素兰万岁【上华】【WAV+CUE】