图解python全局变量与局部变量相关知识_python

来源:脚本之家  责任编辑:小易  

func里面的x是参数,是局部变量。调用func的时候,传进来的值是50,这个会赋值给局部变量x。之后func里面的操作都是影响这个局部的xwww.zgxue.com防采集请勿采集本网。

这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

理解有偏差,不是说ID一样,它引用的就是与全局变量同名,如果没有“=”声明,就是引用全局变量,反之就就是引用局部的变量。因此 a=a+1 在找局部变量的 a,自然就报错,a 变量局部没有进行声明

了解全局变量和局部变量之前,我们先来了解一下作用域

问题不在这个pro_request上,你前面的代码 估计有修改 process的行为。除了为列表直接赋值引用的外 修改新列表是不会改变源列表的内容的。process=[1,2,3,4,5,6] def change1(): pro=[];global

a = 10def func():  b = 20  def inner():    c = 30

没加global都是局部的。这个摇骰子最重要的就是那个random,生成随机数,别的你看看逻辑应该就懂了。

以上面这个程序为例:打印a,b,c

global语句声明后,指定的变量被认为是函数外的。后面的所有操作都是在操作函数外的那个变量,虽然你是在函数内操作的。虽然Python提供了这个功能,但是应该尽量避免这样做,因为这使得程序的

  

可以看到只有a打印 10 ,b和c都报错,这就是作用域的问题。

提供理解供参考: 简单点来说: 1、在python中,全局变量可以直接访问,而局部变量只能在定义的块(如函数体)内部或是通过函数访问。2、同名的变量,会优先使用局部变量。为更好理解,示例代码

我们把新创建的一个.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...)。

名称空间的加载顺序

内置命名空间(程序运行前加载) 一> 全局命名空间(程序运行中:从上到下加载) 一> 局部命名空间(程序运行中:调用时才加载)

名称空间的取值顺序

在局部调用:局部命名空间 一> 全局命名空间 一> 内置命名空间

在全局调用:全局命名空间 一> 内置命名空间

综上所述,在寻找变量时,从小范围,一层一层到大范围去找寻。

global语句声明后,指定的变量被认为是函数外的。后面的所有操作都是在操作函数外的那个变量,虽然你是在函数内操作的。虽然Python提供了这个功能,但是应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。def func():global xprint 'x is',xx=2print 'Changed local x to',xx=50func()print 'Value of x is',x执行结果是这样的x is 50Changed global x to 2Value of x is 2内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • python中实现输入超时及如何通过变量获取变量名
  • python 变量初始化空列表的例子
  • python实现连续变量最优分箱详解--cart算法
  • python中for循环变量作用域及用法详解
  • 解析python的局部变量和全局变量
  • 对python中不同模块(函数、类、变量)的调用详解
  • 对python 中class与变量的使用方法详解
  • python类如何定义私有变量
  • python的debug实用工具 pdb详解
  • pandas数据处理进阶详解
  • django中的cookie和session
  • python命令行参数解析模块optparse使用实例
  • python使用回溯法子集树模板解决迷宫问题示例
  • python使用marshal模块序列化实例
  • python使用自定义user-agent抓取网页的方法
  • django集成celery发送异步邮件实例
  • 使用python获取网段ip个数以及地址清单的方法
  • python中取整的几种方法小结
  • python局部变量和全局变量问题
  • 关于Python的局部变量和全局变量怎么区分的
  • 全局变量和局部变量的区别python
  • 全局变量和局部变量的区别python
  • python 中全局变量和局部变量问题??????
  • 有关python全局变量和局部变量的问题
  • 这程序里 pointStr是全局变量还是局部变量Python的
  • python怎么将局部变量的值传递给全局变量
  • 自动化测试时需要使用python,请问如何理解python中的全局变量和局部变量?
  • python有没有局部变量和全局变量的概念
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页pythonpython中实现输入超时及如何通过变量获取变量名python 变量初始化空列表的例子python实现连续变量最优分箱详解--cart算法python中for循环变量作用域及用法详解解析python的局部变量和全局变量对python中不同模块(函数、类、变量)的调用详解对python 中class与变量的使用方法详解python类如何定义私有变量python的debug实用工具 pdb详解pandas数据处理进阶详解django中的cookie和sessionpython命令行参数解析模块optparse使用实例python使用回溯法子集树模板解决迷宫问题示例python使用marshal模块序列化实例python使用自定义user-agent抓取网页的方法django集成celery发送异步邮件实例使用python获取网段ip个数以及地址清单的方法python中取整的几种方法小结python入门教程 超详细1小时学会python 列表(list)操作方法详解python 元组(tuple)操作详解python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python科学计算环境推荐——anacpython逐行读取文件内容的三种方python中使用xlrd、xlwt操作exce用python制作在地图上模拟瘟疫扩散的gif图解决python 命令行执行脚本时,提示导入的python的sqlalchemy框架使用入门python单元和文档测试实例详解基于python socketserver框架全面解析对python csv模块配置分隔符和引用符详解python opencv 读取本地视频文件 修改ffmpython常见数字运算操作实例小结python异常处理知识点总结python3 map函数和filter函数详解
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved