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生成器表达式和列表解析
Mar 10 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
Python线程下使用锁的技巧分享
Sep 13 Python
pyQt5实时刷新界面的示例
Jun 25 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
python小项目之五子棋游戏
Dec 26 Python
python统计文章中单词出现次数实例
Feb 27 Python
Python-for循环的内部机制
Jun 12 Python
python 常见的反爬虫策略
Sep 27 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 无限极分类
2008/03/27 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Python单链表原理与实现方法详解
2020/02/22 Python
python为什么要安装到c盘
2020/07/20 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
会走路的树教学反思
2014/02/20 职场文书
工作迟到检讨书
2014/02/21 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
会计学专业求职信
2014/07/17 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
2015年暑假工作总结
2015/07/13 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android