解析python的局部变量和全局变量
Python  /  管理员 发布于 7年前   392
局部变量
什么是局部变量
通俗定义:函数内部定义的变量就叫局部变量。
话不多说,代码如下:
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,test2test1()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()"""结果如下:100100"""
如何修改全局变量的值
首先,我们可能是这样想的:
a = 100 # 定义一个全局变量a,并初始化为100# 分别定义函数test1、test2def 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=300100"""
这次我们发现,错误消失了,函数test2中打印变量a的值并没有改变还是100,这是为什么呢?
原因:如果一个全局变量在函数内被重新定义过,再在函数内使用变量则默认为局部变量;如果在函数内没有被定义,直接使用会被视为全局变量。
此时,函数test1中的只是定义了一个名字相同的局部变量而已,并没有改变全局变量的值。
global的使用
这前我们想的法子都不能修改全局变量的值,这下就该认识一个新的关键字 global ,它的功能就是如果需要在函数内定义(修改)全局变量,则要先用global进行声明。
把之前的代码修改如下:
a = 100 # 定义一个全局变量a,并初始化为100# 分别定义函数test1、test2def test1(): global a # 声明函数中使用的a是全局变量 print("修改前:a=%s" % a) a = 300 print("修改后:a=%s" % a)def test2(): print(2)test1()test2()"""结果如下:修改前:a=100修改后:a=300300"""
这下终于修改成功了。
可变类型与不可变类型的全局变量
发现我们之前定义的全局变量是数字类型,是属于不可变类型的,那么修改一个可变类型的全局变量有什么不同呢?
a = [100, 200] # 定义一个列表全局变量a# 分别定义函数test1、test2def 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关键字声明全局变量,它还是会被修改。
事实上:
总结
以上所述是小编给大家介绍的python的局部变量和全局变量,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号