图解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实现同时给多个变量赋值的方法
Apr 30 Python
windows下python之mysqldb模块安装方法
Sep 07 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
Feb 18 Python
python ChainMap的使用和说明详解
Jun 11 Python
python Django 创建应用过程图示详解
Jul 29 Python
python绘制规则网络图形实例
Dec 09 Python
flask框架自定义url转换器操作详解
Jan 25 Python
详解Python中namedtuple的使用
Apr 27 Python
Python自带的IDE在哪里
Jul 01 Python
python基于tkinter制作无损音乐下载工具
Mar 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
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
PHP迭代器接口Iterator用法分析
2017/12/28 PHP
php压缩文件夹最新版
2018/07/18 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
7个JS基础知识总结
2014/03/05 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
Python字符串处理实例详解
2017/05/18 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
python日志模块logbook使用方法
2019/09/19 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
夜班门卫岗位职责
2013/12/09 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
军训自我鉴定100字
2014/02/13 职场文书
实训报告范文大全
2014/11/04 职场文书