图解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列表操作使用示例分享
Feb 21 Python
深入分析在Python模块顶层运行的代码引起的一个Bug
Jul 04 Python
解密Python中的描述符(descriptor)
Jun 03 Python
Python多线程爬虫简单示例
Mar 04 Python
基于Python os模块常用命令介绍
Nov 03 Python
python MySQLdb使用教程详解
Mar 20 Python
使用 python pyautogui实现鼠标键盘控制功能
Aug 04 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
Jan 29 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之Smarty入门
2007/01/04 PHP
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
php浏览历史记录的方法
2015/03/10 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
Python yield与实现方法代码分析
2018/02/06 Python
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
对Python 内建函数和保留字详解
2018/10/15 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
Python绘图实现显示中文
2019/12/04 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
幼儿园大班毕业感言
2014/02/06 职场文书
运动会广播稿150字
2014/02/19 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
文化活动实施方案
2014/03/28 职场文书
应届毕业生自荐书
2014/06/18 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers