图解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系列之数据处理编程实例(二)
May 22 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
python 多线程将大文件分开下载后在合并的实例
Nov 09 Python
PyTorch基本数据类型(一)
May 22 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
Python综合应用名片管理系统案例详解
Jan 03 Python
基于python实现模拟数据结构模型
Jun 12 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
浅析python连接数据库的重要事项
Feb 22 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自动适应范围的分页代码
2008/08/05 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
Javascript中的this绑定介绍
2011/09/22 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue实现购物车的监听
2020/04/20 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
python实现指定字符串补全空格的方法
2015/04/30 Python
深入理解Python中字典的键的使用
2015/08/19 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
python Shapely使用指南详解
2020/02/18 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
您的网上新华书店:文轩网
2016/08/24 全球购物
计算机求职信
2013/12/01 职场文书
决心书范文
2014/03/11 职场文书
社会调查研究计划书
2014/05/01 职场文书
校园广播站开场白
2015/06/01 职场文书
放牛班的春天观后感
2015/06/01 职场文书
安全温馨提示语大全
2015/07/14 职场文书
大学新生入学感想
2015/08/07 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书