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之for循环语句
Oct 02 Python
python实现简单的计时器功能函数
Mar 14 Python
python制作最美应用的爬虫
Oct 28 Python
numpy.transpose对三维数组的转置方法
Apr 17 Python
Django model反向关联名称的方法
Dec 15 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
如何使用python把ppt转换成pdf
Jun 29 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
python 列表推导式使用详解
Aug 29 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
浅谈keras.callbacks设置模型保存策略
Jun 18 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
php截取后台登陆密码的代码
2012/05/05 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
php根据年月获取季度的方法
2014/03/31 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
PHP中list方法用法示例
2016/12/01 PHP
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
深入理解Python中range和xrange的区别
2017/11/26 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
《赵州桥》教学反思
2014/02/17 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
担保书怎么写
2014/04/01 职场文书
通信工程专业求职信
2014/06/04 职场文书
超市店庆活动方案
2014/08/31 职场文书
交通事故协议书范文
2014/10/23 职场文书
被告代理词范文
2015/05/25 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
教师节随笔
2015/08/15 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
妇产科护理心得体会
2016/01/22 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers