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 简易计算器程序,代码就几行
Aug 29 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
使用python实现省市三级菜单效果
Jan 20 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
详解django自定义中间件处理
Nov 21 Python
Django 用户认证组件使用详解
Jul 23 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
Apr 15 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中的CMS的涵义
2007/03/11 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
php实现的简单检验登陆类
2015/06/18 PHP
PHP异常处理Exception类
2015/12/11 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
重定向实现代码
2006/11/20 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
快速查找Python安装路径方法
2020/02/06 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
python Matplotlib模块的使用
2020/09/16 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
幼儿园教师教育感言
2014/02/28 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
企业总经理任命书
2014/06/05 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
女方离婚起诉书
2015/05/18 职场文书
故意杀人案辩护词
2015/05/21 职场文书
Docker下安装Oracle19c
2022/04/13 Servers