这篇文章主要介绍了图解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全局变量与局部变量相关知识相关推荐

  1. python变量和列表_自学python第一天——变量和列表

    从零开始,万事开头难,从最基础的开始.学python已有几天,因为有C语言和perl语言的基础,学起python确实是很快,我发现python有很多很好的函数功能,比如: chl = "la ...

  2. [python]变量作用域问题

    先列出参考链接: python变量作用域–作者:lovingprince python开发杂货铺:作用域的痛点-作者:Assassin python中在哪些情况下必须使用global来声明全局变量 p ...

  3. Python 变量作用域问题 函数名.变量名

    刚接触Python,主要想利用它做数据处理.我用的是Python2.7.5,win7系统 最近在看<机器学习实战>,第三章决策树中有一段代码,摘抄如下,对于用颜色标注部分,刚开始没看懂什么 ...

  4. Python变量作用域(全局变量和局部变量)

    Python变量作用域(全局变量和局部变量) 所谓作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用.有些变量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只 ...

  5. Python变量作用域问题

    本文最后更新于2018-6-20,可能会因为没有更新而失效.如已失效或需要修正,请联系我! 今天在用Python写程序时突然想起了Python变量作用域的问题,代码如下: def run():glob ...

  6. Python 变量作用域与函数(4)

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  7. 、简述global关键字的作用_二十三、Python变量作用域(局部变量和全局变量)

    变量的作用域 在Python中,变量的作用域指的是变量起作用的范围,不同的作用域内,虽然变量的名字相同,但是它们互不影响.变量按照作用域范围可分为局部变量和全局变量. 全局变量 全局变量是在函数定义和 ...

  8. python变量作用域图解_python的变量作用域问题

    偶然掉进了一个坑里.仔细分析了下原因.原来是变量作用域的问题.简单抽象如下: id=1 #许多行代码 [id for id in range(10)] #许多行代码 if id!=1: #做一些事情 ...

  9. python变量作用域和生存期_变量的生存期和作用域

    变量的生存期和作用域是个很基础但又很重要的问题,所以我打算写几百字重温一下. 变量的生存期是指变量在什么时间段存在. 变量的作用域是指变量在哪些代码块中能够被访问. 一般来说变量生存期包含作用域.即在 ...

最新文章

  1. C#之Action和Func的用法
  2. 研旭电子dsp配套程序_为什么自动调音DSP还火不了?
  3. centos samba 配置
  4. Linux gcc 制作静态库01
  5. Mysql 8.0 安装教程 Linux Centos7
  6. KKT条件 拉格朗日乘子法
  7. 会优化,你真的会优化吗?其实你可能真的缺少一份理解【数据库篇】
  8. AS3 的 2D向量类(Vector2D)
  9. 多人语音聊天社交app源码,语音聊天的优势是什么,语音系统源码开发
  10. dsscocx控件出错怎么办_关于解决OCX控件调用失败问题的总结
  11. 银行卡四元素校验接口
  12. js中继承的方法总结(apply,call,prototype)
  13. bluehost中国和bluehost美国的区别?应该选择哪个?
  14. Java------IO流之文件专属流
  15. 图像识别,ocr 技术,有兴趣的可以了解一下
  16. matlab曲面拟合的算法,用Matlab 实现移动曲面拟合法生成DEM
  17. 互联网产品上线前,做些什么——产品、开发、测试的视角(转载)
  18. 教你如何轻松测试局域网网速
  19. PT静态时序分析 第一课 第二课
  20. 2.3 基于FPGA的UART协议实现(一)串口信号定义和接线方法-5针串口-9针串口-全功能串口

热门文章

  1. div和span标签(HTML)
  2. PCL综合开发(一):Qt 5.14 + PCL 1.8.1 +VS 2017环境配置
  3. 7Python全栈之路系列之Django表单
  4. verilog实现多周期处理器之——(二)第一条指令ori的实现
  5. rabbitmq python 发送失败_python rabbitmq no_ack=false
  6. [linux]centos6.3安装flash插件rpm方式
  7. 360云盘直链解析PHP,360云盘分析直链解析
  8. javascript call 详细解答与实践
  9. // 产生10到100随机数
  10. MySQL数据库与Oracle数据库在存储中文字符以字节或字符存储的区别