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 ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
Python中的列表知识点汇总
Apr 14 Python
简单介绍Python下自己编写web框架的一些要点
Apr 29 Python
Python获取任意xml节点值的方法
May 05 Python
python中virtualenvwrapper安装与使用
May 20 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
python实现静态服务器
Sep 05 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
python实现简单井字棋游戏
Mar 04 Python
Python中的整除和取模实例
Jun 03 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 Python
Python文件的操作示例的详细讲解
Apr 08 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 JSON中文乱码的解决方法详解
2013/06/06 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
php学习笔记之基础知识
2014/11/08 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
解析Python中的异常处理
2015/04/28 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
如何更优雅地写python代码
2019/07/02 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
python opencv实现图像配准与比较
2021/02/09 Python
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
六查六看自查材料
2014/02/17 职场文书
毕业感言怎么写
2015/07/31 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
浅谈MySQL中的六种日志
2022/03/23 MySQL