图解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学习pygal绘制线图代码分享
Dec 09 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
在Mac上删除自己安装的Python方法
Oct 29 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
对python中UDP,socket的使用详解
Aug 22 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
python入门之井字棋小游戏
Mar 05 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 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的五种设计模式
2012/09/05 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php HTML无刷新提交表单
2016/04/05 PHP
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
React组件的三种写法总结
2017/01/12 Javascript
浅谈Node模块系统及其模式
2017/11/17 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
示例vue 的keep-alive缓存功能的实现
2018/12/13 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
python脚本实现验证码识别
2018/06/07 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
香港零食网购:上仓胃子
2020/06/08 全球购物
零件设计自荐信范文
2013/11/27 职场文书
网络研修随笔感言
2014/02/17 职场文书
公司业务员岗位职责
2014/03/18 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
文明市民先进事迹
2014/05/15 职场文书
单位委托书格式范本
2014/09/29 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
文书工作总结(范文)
2019/07/11 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
Pygame Event事件模块的详细示例
2021/11/17 Python