图解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检测QQ在线状态的方法
May 09 Python
python中redis的安装和使用
Dec 04 Python
详解python中字典的循环遍历的两种方式
Feb 07 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
Django密码系统实现过程详解
Jul 19 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
Python基于字典实现switch case函数调用
Jul 22 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 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实现框架(一)
2006/10/09 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
php的常量和变量实例详解
2017/06/27 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
javascript实现留言板功能
2020/02/08 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
详解python3百度指数抓取实例
2016/12/12 Python
Python 查看文件的编码格式方法
2017/12/21 Python
python3 爬取图片的实例代码
2018/11/06 Python
python命令行工具Click快速掌握
2019/07/04 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
python3爬虫GIL修改多线程实例讲解
2020/11/24 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
幼儿园中秋节活动方案2013
2014/01/29 职场文书
家长评语和期望
2014/02/10 职场文书
决心书标准格式
2014/03/11 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
初中语文教学随笔
2015/08/15 职场文书