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 相关文章推荐
linux系统使用python监测系统负载脚本分享
Jan 15 Python
利用python将xml文件解析成html文件的实现方法
Dec 22 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
手写一个python迭代器过程详解
Aug 27 Python
python实现文件批量编码转换及注意事项
Oct 14 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
MATLAB数学建模之画图汇总
Jul 16 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
Python lxml模块安装教程
2015/06/02 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
python多线程之事件Event的使用详解
2018/04/27 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
python函数定义和调用过程详解
2020/02/09 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
社区党总支书记先进事迹材料
2014/01/24 职场文书
心理健康教育制度
2014/01/27 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
学生干部培训方案
2014/06/12 职场文书
管理标语大全
2014/06/24 职场文书
客户答谢会活动方案
2014/08/31 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
图文详解nginx日志切割的实现
2022/01/18 Servers