图解python全局变量与局部变量相关知识


Posted in Python onNovember 02, 2019

这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

了解全局变量和局部变量之前,我们先来了解一下作用域

a = 10
def func():
b = 20

def inner():


c = 30

以上面这个程序为例:打印a,b,c

图解python全局变量与局部变量相关知识

可以看到只有a打印 10 ,b和c都报错,这就是作用域的问题。

我们把新创建的一个.py文件看做事一个模块,在模块内定义的变量,如a,就是这个模块的全局变量,作用于全局,不论在哪都可以调用,

但是b和c 是定义在函数内部的,我们叫做局部变量,只能作用在函数内部。

图解python全局变量与局部变量相关知识

我们在看一个问题

func和inner函数可以调用变量a 么?

func函数可以调用变量c么?

答案是:a是全局变量,可以在任意地方调用

图解python全局变量与局部变量相关知识

但是func函数不可以调用c,这时候我们把func看做一个整体,那么inner就是在func内部定义的函数,c也就是inner内部的变量

图解python全局变量与局部变量相关知识

总结:变量定义在全局可以在任何地方调用,定义在函数内部,只能在函数内使用。

变量查找顺序:LEGB

局部作用域>外层作用域>当前模块中全局>python内置作用域;

在来说关于全局和局部变量的两个两个方法:global,nonlocal。

直接上例子吧:

图解python全局变量与局部变量相关知识

我们可以看到,局部定义了a, 那么我们直接调用a就会报错,

只有在定义后调用才会打印,并且全局变量的a值不会改变

图解python全局变量与局部变量相关知识

如果我现在想在局部名称空间改变a的值该怎么做呢?这时候就要用到global了

图解python全局变量与局部变量相关知识

我们可以看到,全局变量a的值已经修改成15了。

下面来说nonlocal:

图解python全局变量与局部变量相关知识

我们看到这时候打印a、b的时候出错了,错误提示是没有定义b

但是a没有报错,这是因为a是全局变量,而b是局部变量,所以出现了这种错误,改正如下:

图解python全局变量与局部变量相关知识

因为b是局部变量,所以调用之前用nonlocal声明,之后就可以调用了。

名称空间

名称空间分类

全局命名空间( Global):每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。

局部命名空间(Local):每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。

内置命名空间(Built-in):任何模块均可以访问,放着内置的函数和异常(比如:input,print,str,list,tuple...)。

名称空间的加载顺序

内置命名空间(程序运行前加载) 一> 全局命名空间(程序运行中:从上到下加载) 一> 局部命名空间(程序运行中:调用时才加载)

名称空间的取值顺序

在局部调用:局部命名空间 一> 全局命名空间 一> 内置命名空间

在全局调用:全局命名空间 一> 内置命名空间

综上所述,在寻找变量时,从小范围,一层一层到大范围去找寻。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
python监控文件并且发送告警邮件
Jun 21 Python
浅析python中numpy包中的argsort函数的使用
Aug 30 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
如何在Django配置文件里配置session链接
Aug 06 Python
python输出带颜色字体实例方法
Sep 01 Python
python 实现PIL模块在图片画线写字
May 16 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
Python如何实现动态数组
Nov 02 #Python
python基于gevent实现并发下载器代码实例
Nov 01 #Python
python进程间通信Queue工作过程详解
Nov 01 #Python
通过实例了解python property属性
Nov 01 #Python
python装饰器练习题及答案
Nov 01 #Python
Django框架HttpRequest对象用法实例分析
Nov 01 #Python
Django框架HttpResponse对象用法实例分析
Nov 01 #Python
You might like
使用 php4 加速 web 传输
2006/10/09 PHP
php5.2.0内存管理改进
2007/01/22 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
javascript Event对象详解及使用示例
2013/11/22 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
python安装与使用redis的方法
2016/04/19 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
Linux文件操作命令都有哪些
2016/07/23 面试题
学校运动会开幕演讲稿
2014/01/04 职场文书
借款协议书范本
2014/04/22 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
python基础之while循环语句的使用
2021/04/20 Python
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript