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 相关文章推荐
打开电脑上的QQ的python代码
Feb 10 Python
python解决字典中的值是列表问题的方法
Mar 04 Python
python基础教程之分支、循环简单用法
Jun 16 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
python-xpath获取html文档的部分内容
Mar 06 Python
Python函数基本使用原理详解
Mar 19 Python
python实现简单坦克大战
Mar 27 Python
python实现最短路径的实例方法
Jul 19 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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
javascript 表单验证常见正则
2009/09/28 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
python破解zip加密文件的方法
2018/05/31 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
python装饰器代码深入讲解
2021/03/01 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
商务主管岗位职责
2013/12/08 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
世界环境日活动总结
2015/02/11 职场文书
考研导师推荐信范文
2015/03/27 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
Java存储没有重复元素的数组
2022/04/29 Java/Android