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 相关文章推荐
最大K个数问题的Python版解法总结
Jun 16 Python
Python中捕获键盘的方式详解
Mar 28 Python
linux环境下Django的安装配置详解
Jul 22 Python
Python统计时间内的并发数代码实例
Dec 28 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
python如何保存文本文件
Jun 07 Python
Keras自定义IOU方式
Jun 10 Python
Python爬虫之爬取最新更新的小说网站
May 06 Python
Python关于OS文件目录处理的实例分享
May 23 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 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连接SQLServer2005的方法
2015/01/27 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
javascript实现数独解法
2015/03/14 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
Vue分页效果与购物车功能
2019/12/13 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
JS如何在数组指定位置插入元素
2020/03/10 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
快速了解Python中的装饰器
2018/01/11 Python
tensorflow获取变量维度信息
2018/03/10 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
python中if嵌套命令实例讲解
2021/02/25 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
如何写一个自定义标签
2012/12/28 面试题
2014年上半年工作自我评价
2014/01/18 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
公司介绍信范文
2015/01/31 职场文书
销售经理岗位职责
2015/01/31 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书