解析python的局部变量和全局变量
作者:三国小梦 发布时间:2023-08-23 18:17:01
局部变量
什么是局部变量
通俗定义:函数内部定义的变量就叫局部变量。
话不多说,代码如下:
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的局部变量和全局变量,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/lxy0/p/11356029.html
猜你喜欢
- 我已安装了WINDOWS NT OPTON PACK 中的SMTP Service,请问如何使用它的发送邮件功能?在安装了SMTP Serv
- 前言本文主要给大家介绍了关于python使用正则表达式的非贪婪模式的相关内容,分享出来供大家参考学习,下面话不多说了,来一起详细的介绍吧。在
- 中文字体设计发展到现在,风格越来越多样化,特别是在广告(美术)字体方面,因为字数少 局限小,优秀的作品层出不穷,比较突出的应用在标志设计唱片
- 在页面中自定义了changejs函数后页面提示错误:Active Server Pages 错误 'ASP 0138' 嵌套
- 一、使用sklearn转换器处理sklearn提供了model_selection模型选择模块、preprocessing数据预处理模块、d
- 基于python3+OpenCV的人脸和眼睛识别,供大家参考,具体内容如下一、OpenCV人脸检测的xml文件下载人脸检测和眼睛检测要用到h
- 测试题defer有一些规则,如果不了解,代码实现的最终结果会与预期不一致。对于这些规则,你了解吗?这是关于defer使用的代码,可以先考虑一
- 在近几年Python的呼声越来越高,很多刚开始起步想要学习编程的朋友都会犹豫要不要选择学习Python,毕竟作为人工智能时代的首选语言这个诱
- insert into testtable(recordnumber,currentdate) values (i,sysdate); pr
- 当系统出现故障时,只要存在数据日志那么就可以利用它来恢复数据解决数据库故障。作为SQL Server数据库管理员,了解数据日志文件的作用,以
- 今天来讲一下一些实现html中表格隔行换色的方法,即每隔一个行表格的背景色就不同,有静态html/css实现的,也有asp动态实现的。这个功
- 昨天给公司服务器重做了一下系统,遇到Asp附件无法上传,之前服务器上使用好好的,怎么重做了就不正常了,于是一番google,baidu,下面
- 网站 首页页面宽度 px Yahoo! 950 淘宝 950 MySpace 960 新浪 950 网易 960 Live Search 9
- 在网络浏览器软件中,可以Internet Explorer (IE)现在是一种标准的软件。可以看到,运行不同版本的Windows操作系统(和
- 本游戏程序实现的功能为本地二人对弈中国象棋,实现语言为javascript+VML,在windows 2000 pro+IE 6sp1的环境
- prototype框架最早是出于方便Ruby开发人员进行JavaScript开发所构建的,从这个版本上更加体现的淋漓尽致。比起1.3.1版本
- 内容摘要:本文介绍了通过获取访问者的IP地址来统计在线人数的方法,本文只是给出了实现统计在线人数的方法思路,具体代码的实现过程还得自己动手(
- 首先添加一个splice函数:splice:该方法的作用就是从数组中删除一个元素array.splice(index,count,value
- 在很多情况下,我们可能需要控制某一段代码只执行一次,比如做某些初始化操作,如初始化数据库连接等。 对于这种场景,go 为我们提供了 sync
- 如何检测某个对象是否有某个属性?第一想到的——没错,in:"prop" in obj这很完美,不过,还有不少人热衷下面的