图解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 相关文章推荐
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
使用Python的turtle模块画国旗
Sep 24 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
python解析多层json操作示例
Dec 30 Python
Python拼接字符串的7种方式详解
Mar 19 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
python实现程序重启和系统重启方式
Apr 16 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
pandas to_excel 添加颜色操作
Jul 14 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
分享python函数常见关键字
Apr 26 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
PHP Array交叉表实现代码
2010/08/05 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
php生成短网址示例
2014/05/05 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
对python中for、if、while的区别与比较方法
2018/06/25 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
世界上最好的帽子:Tilley
2016/11/27 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
干部个人对照检查材料
2014/08/25 职场文书
2014年药房工作总结
2014/11/22 职场文书
委托公证书样本
2015/01/23 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
委托书范本格式
2019/04/18 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers