python变量作用域图解_图解python全局变量与局部变量相关知识
这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
了解全局变量和局部变量之前,我们先来了解一下作用域
a = 10
def func():
b = 20
def inner():
c = 30
以上面这个程序为例:打印a,b,c
可以看到只有a打印 10 ,b和c都报错,这就是作用域的问题。
我们把新创建的一个.py文件看做事一个模块,在模块内定义的变量,如a,就是这个模块的全局变量,作用于全局,不论在哪都可以调用,
但是b和c 是定义在函数内部的,我们叫做局部变量,只能作用在函数内部。
我们在看一个问题
func和inner函数可以调用变量a 么?
func函数可以调用变量c么?
答案是:a是全局变量,可以在任意地方调用
但是func函数不可以调用c,这时候我们把func看做一个整体,那么inner就是在func内部定义的函数,c也就是inner内部的变量
总结:变量定义在全局可以在任何地方调用,定义在函数内部,只能在函数内使用。
变量查找顺序:LEGB
局部作用域>外层作用域>当前模块中全局>python内置作用域;
在来说关于全局和局部变量的两个两个方法:global,nonlocal。
直接上例子吧:
我们可以看到,局部定义了a, 那么我们直接调用a就会报错,
只有在定义后调用才会打印,并且全局变量的a值不会改变
如果我现在想在局部名称空间改变a的值该怎么做呢?这时候就要用到global了
我们可以看到,全局变量a的值已经修改成15了。
下面来说nonlocal:
我们看到这时候打印a、b的时候出错了,错误提示是没有定义b
但是a没有报错,这是因为a是全局变量,而b是局部变量,所以出现了这种错误,改正如下:
因为b是局部变量,所以调用之前用nonlocal声明,之后就可以调用了。
名称空间
名称空间分类
全局命名空间( Global):每个模块加载执行时创建的,记录了模块中定义的变量,包括模块中定义的函数、类、其他导入的模块、模块级的变量与常量。
局部命名空间(Local):每个函数所拥有的命名空间,记录了函数中定义的所有变量,包括函数的入参、内部定义的局部变量。
内置命名空间(Built-in):任何模块均可以访问,放着内置的函数和异常(比如:input,print,str,list,tuple...)。
名称空间的加载顺序
内置命名空间(程序运行前加载) 一> 全局命名空间(程序运行中:从上到下加载) 一> 局部命名空间(程序运行中:调用时才加载)
名称空间的取值顺序
在局部调用:局部命名空间 一> 全局命名空间 一> 内置命名空间
在全局调用:全局命名空间 一> 内置命名空间
综上所述,在寻找变量时,从小范围,一层一层到大范围去找寻。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
python变量作用域图解_图解python全局变量与局部变量相关知识相关推荐
- python变量和列表_自学python第一天——变量和列表
从零开始,万事开头难,从最基础的开始.学python已有几天,因为有C语言和perl语言的基础,学起python确实是很快,我发现python有很多很好的函数功能,比如: chl = "la ...
- [python]变量作用域问题
先列出参考链接: python变量作用域–作者:lovingprince python开发杂货铺:作用域的痛点-作者:Assassin python中在哪些情况下必须使用global来声明全局变量 p ...
- Python 变量作用域问题 函数名.变量名
刚接触Python,主要想利用它做数据处理.我用的是Python2.7.5,win7系统 最近在看<机器学习实战>,第三章决策树中有一段代码,摘抄如下,对于用颜色标注部分,刚开始没看懂什么 ...
- Python变量作用域(全局变量和局部变量)
Python变量作用域(全局变量和局部变量) 所谓作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用.有些变量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只 ...
- Python变量作用域问题
本文最后更新于2018-6-20,可能会因为没有更新而失效.如已失效或需要修正,请联系我! 今天在用Python写程序时突然想起了Python变量作用域的问题,代码如下: def run():glob ...
- Python 变量作用域与函数(4)
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- 、简述global关键字的作用_二十三、Python变量作用域(局部变量和全局变量)
变量的作用域 在Python中,变量的作用域指的是变量起作用的范围,不同的作用域内,虽然变量的名字相同,但是它们互不影响.变量按照作用域范围可分为局部变量和全局变量. 全局变量 全局变量是在函数定义和 ...
- python变量作用域图解_python的变量作用域问题
偶然掉进了一个坑里.仔细分析了下原因.原来是变量作用域的问题.简单抽象如下: id=1 #许多行代码 [id for id in range(10)] #许多行代码 if id!=1: #做一些事情 ...
- python变量作用域和生存期_变量的生存期和作用域
变量的生存期和作用域是个很基础但又很重要的问题,所以我打算写几百字重温一下. 变量的生存期是指变量在什么时间段存在. 变量的作用域是指变量在哪些代码块中能够被访问. 一般来说变量生存期包含作用域.即在 ...
最新文章
- C#之Action和Func的用法
- 研旭电子dsp配套程序_为什么自动调音DSP还火不了?
- centos samba 配置
- Linux gcc 制作静态库01
- Mysql 8.0 安装教程 Linux Centos7
- KKT条件 拉格朗日乘子法
- 会优化,你真的会优化吗?其实你可能真的缺少一份理解【数据库篇】
- AS3 的 2D向量类(Vector2D)
- 多人语音聊天社交app源码,语音聊天的优势是什么,语音系统源码开发
- dsscocx控件出错怎么办_关于解决OCX控件调用失败问题的总结
- 银行卡四元素校验接口
- js中继承的方法总结(apply,call,prototype)
- bluehost中国和bluehost美国的区别?应该选择哪个?
- Java------IO流之文件专属流
- 图像识别,ocr 技术,有兴趣的可以了解一下
- matlab曲面拟合的算法,用Matlab 实现移动曲面拟合法生成DEM
- 互联网产品上线前,做些什么——产品、开发、测试的视角(转载)
- 教你如何轻松测试局域网网速
- PT静态时序分析 第一课 第二课
- 2.3 基于FPGA的UART协议实现(一)串口信号定义和接线方法-5针串口-9针串口-全功能串口
热门文章
- div和span标签(HTML)
- PCL综合开发(一):Qt 5.14 + PCL 1.8.1 +VS 2017环境配置
- 7Python全栈之路系列之Django表单
- verilog实现多周期处理器之——(二)第一条指令ori的实现
- rabbitmq python 发送失败_python rabbitmq no_ack=false
- [linux]centos6.3安装flash插件rpm方式
- 360云盘直链解析PHP,360云盘分析直链解析
- javascript call 详细解答与实践
- // 产生10到100随机数
- MySQL数据库与Oracle数据库在存储中文字符以字节或字符存储的区别