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中input和raw_input的一点区别
Oct 21 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
Apr 15 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
TensorFlow实现卷积神经网络
May 24 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
python中元组的用法整理
Jun 15 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
详解python 内存优化
Aug 17 Python
Python实现异步IO的示例
Nov 05 Python
编写python程序的90条建议
Apr 14 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
sphinx增量索引的一个问题
2011/06/14 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
Python用模块pytz来转换时区
2016/08/19 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
Python笔记之facade模式
2019/11/20 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
Python阶乘求和的代码详解
2020/02/14 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
python判断变量是否为列表的方法
2020/09/17 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
运动会广播稿300字
2014/01/10 职场文书
治超工作实施方案
2014/05/04 职场文书
家装电话营销开场白
2015/05/29 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL