图解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兔子毒药问题实例分析
Mar 05 Python
利用Python生成文件md5校验值函数的方法
Jan 10 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
用vue.js组件模拟v-model指令实例方法
Jul 05 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
PYcharm 激活方法(推荐)
Mar 23 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
python 制作简单的音乐播放器
Nov 25 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
destoon常用的安全设置概述
2014/06/21 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
Python pass 语句使用示例
2014/03/11 Python
python字符串替换示例
2014/04/24 Python
python实现的简单猜数字游戏
2015/04/04 Python
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
Python zip()函数用法实例分析
2018/03/17 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
pandas apply多线程实现代码
2020/08/17 Python
python文件排序的方法总结
2020/09/13 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
退伍老兵事迹材料
2014/01/31 职场文书
任命书模板
2014/06/04 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP