Python中全局变量和局部变量的理解与区别


Posted in Python onFebruary 07, 2021

前言

学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念

但是与其他编程语言又有所不同

全局变量与局部变量两者的本质区别就是在于作用域

用通俗的话来理解的话,

全局变量是在整个py文件中声明,全局范围内都可以访问

局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了

如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样使用,这样会使得程序很不健全

直接来看几个例子来理解全局变量和局部变量的区别吧:

Demo1:

def fun(x):
 y=2
 print("乘法的运行结果:",x*y)
num1=1
print("初始num1=",num1)
fun(num1)
print("y的值是:",y)

运行结果:

Python中全局变量和局部变量的理解与区别

报错的原因是因为试图访问局部变量,但是访问的地方不在该变量y的作用域中

Demo2:

def fun():
 num1=2
 print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)

运行结果:

Python中全局变量和局部变量的理解与区别

可以看到在函数内部对全局变量的修改后,在函数执行完毕,修改的结果是无效的,全局变量并不会受到影响

再看:

Demo3:

def fun():
 num1*=2
 print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)

运行结果:

Python中全局变量和局部变量的理解与区别

报错了。这是因为在fun()函数使用了局部变量num1,它只是个跟全局变量同名的局部变量,使用前还是要赋值,因此再次强调不要这样使用

global关键字

如果真的想要在函数体内修改全局变量的值,就要使用global关键字

Demo4:

def fun():
 global num1
 num1=2
 print("函数内修改后num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("运行完函数后num1=",num1)

运行结果:

Python中全局变量和局部变量的理解与区别

使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思

nonlocal关键字

再看看另一个跟变量相关的关键字nonlocal,字面意思就是指当前的这个变量不是局部变量。nonlocal是Python3.0中新增的关键字,python2.x不支持

先来看看下面这段代码

def fun():
 num2=3
 def fun2():
 num2*=2
 print("num2=",num2)
 return fun2()
 
fun()

运行结果:

Python中全局变量和局部变量的理解与区别

错误的原因跟前面的差不多,就是使用了未定义的局部变量,然而num2也不是全局变量,只是fun2函数的外层变量,强行使用global定义num2的话同样会报错(不信你试试)

这时候需要使用nonlocal关键字:

def fun():
 num2=3
 def fun2():
 nonlocal num2
 num2*=2
 print("num2=",num2)
 return fun2()
 
fun()

运行结果:

Python中全局变量和局部变量的理解与区别

如此,程序就能正常执行

总结

到此这篇关于Python中全局变量和局部变量的文章就介绍到这了,更多相关Python全局变量和局部变量内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
在Python的web框架中配置app的教程
Apr 30 Python
Python 数据结构之队列的实现
Jan 22 Python
彻底理解Python list切片原理
Oct 27 Python
tensorflow实现简单的卷积神经网络
May 24 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
Python迷宫生成和迷宫破解算法实例
Dec 24 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
keras实现调用自己训练的模型,并去掉全连接层
Jun 09 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
python实现最短路径的实例方法
Jul 19 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 #Python
Python图像处理之膨胀与腐蚀的操作
Feb 07 #Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 #Python
python数据抓取3种方法总结
Feb 07 #Python
python 批量将中文名转换为拼音
Feb 07 #Python
如何用用Python将地址标记在地图上
Feb 07 #Python
python 三种方法提取pdf中的图片
Feb 07 #Python
You might like
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
初学JavaScript第二章
2008/09/30 Javascript
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python写入CSV文件的方法
2015/07/08 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
python合并同类型excel表格的方法
2018/04/01 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
python如何变换环境
2020/07/21 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
硕士论文致谢范文
2015/05/14 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
springboot入门 之profile设置方式
2022/04/04 Java/Android