global与nonlocal
在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local)、嵌套作用域(Enclosing function locals)、全局作用域(Global)、内置作用域(builtins模块)的顺序来进行的,即所谓的LEGB规则。
然而当在一个函数内部为一个变量赋值时,并不是按照上面所说LEGB规则来首先找到变量,之后为该变量赋值。在Python中,在函数中为一个变量赋值时,有下面这样一条规则:
“当在函数中给一个变量名赋值是(而不是在一个表达式中对其进行引用),Python总是创建或改变本地作用域的变量名,除非它已经在那个函数中被声明为全局变量. ”
global适用于函数内部修改全局变量的值
nonlocal适用于嵌套函数中内部函数修改外部变量的值
举例说明:
x = 1
def f1():x = 2
f1()
print(x) #输出 1
在上面的程序当中先定义了一个全局变量x=1,也就是说现在全局名称空间现在有了一个x=1,接下来在f1函数当中又给x赋值为2,但是因为在f1函数当中没有变量x,所以python会在f1函数这个本地作用域创建一个变量x,也就是说这个x只存在于本地作用域,并非是全局变量中的那个x。而后运行程序打印的那个x会优先找到全局变量中的x,所以最后会输出1。
如果想在函数内部修改全局变量x,就需要用到global关键字:
x = 1
def f1():global xx = 2
f1()
print(x) #输出 2
使用global关键字就是在告诉python,我们要在局部作用域使用全局变量,所以在x=2语句当中,python不会再在本地作用域中再新建一个变量,而是直接使用全局变量中的x变量
nonlocal关键字的作用与global类似,举例:
def f1():a = 250def f2():a = 520f2()print(a)
f1() # 输出 250
在这个程序当中,在嵌套的f2函数当中,对变量a的赋值,同样因为在本地作用域中没有x,python会在f2函数的内存空间在创建一个新的变量a,如果想要修改嵌套作用域中的a,就要使用关键字nonlocal
def f1():a = 250def f2():nonlocal aa = 520f2()print(a)
f1() # 输出 520
使用了nonlocal关键字就是告诉python,我们要在f2函数中使用外部变量a,所以我们在f2函数内对a变量进行赋值时就使用的是外部变量a,而不是重新创建出来的变量
注意:使用global
关键字修饰的变量之前可以并不存在,而使用nonlocal
关键字修饰的变量在嵌套作用域中必须已经存在,否则会报错。
global与nonlocal相关推荐
- global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了. def fun(): global num1 num1=2 print("函数内修改后num1=&qu ...
- python函数教程:global 和 nonlocal的详细用法
global 方法 我们来看下面这段代码: b = 100 def func():b = b + 1return b print(func()) 这段代码看上去中规中矩,似乎没有什么问题,但是程序运行 ...
- python global和nonlocal用法解析
这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 global和nonlocal ...
- 动态参数与global和nonlocal
1. 动态参数 位置参数的动态参数: *args 关键字参数的动态参数 : **kwargs 顺序: 位置,*args,默认值,**kwargs 在形参上*聚合, **聚合 在实参上*打散, **打散 ...
- python学习-类(global、nonlocal、继承、多态)
文章目录 global与nonlocal 继承和多态 global与nonlocal 1.函数内部定义的为局部变量,其作用域是局部作用域,函数外无法调用的 2.函数外定义的为全局变量,其作用域是全局作 ...
- 一个例子带你搞懂python作用域中的global、nonlocal和local
在编程中,只要接触过函数的,我相信都理解什么是全局变量和局部变量,概念比较简单,这里就不做解释了.在python中,用global语句就能将变量定义为全局变量,但是最近又发现有个nonlocal,一时 ...
- nonlocal python3_Python 中的 global、nonlocal 辨析
global 语句 语法:声明此变量为全局变量 用法: global [变量名] 注意:引用全局变量时,不需要global 声明,但是后面使用或者修改这个全局变量的时候,需要global声明. 应用场 ...
- Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)...
Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal) 名称空间(命名空间): 当程序运行时,代码从上至下一次读取,遇到变量与值, ...
- python nonlocal的用法_python global和nonlocal用法解析
这篇文章主要介绍了python global和nonlocal用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ◆global和nonloca ...
- [转载] python不允许使用关键字_Python中关键字global与nonlocal的区别
参考链接: Python全局关键字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xCyansun/article/details/79672634 ...
最新文章
- linux设备驱动归纳总结
- C#导入Excel2010出现加载DLL失败或者类库未注册的问题,0x8002801D或者0x80029C4A .
- 2009-08 台湾印象
- 2009-08-19股市大跌分析(转载)
- Chevereto图片托管php源码_亲测-分享最新微信付费进群收费进群系统源码-附带搭建教...
- Check for Palindromes(算法)
- 二叉树先序、中序和后序遍历
- 图片区域帧差法识别物体_matlab
- screw-plus实现php代码安全
- echarts 获取点击的y轴数值_ECharts关系图
- 怎么通过当地时区计算格林尼治_时间规划局:时间能看到,标注在你的手臂上,那时的你会怎么样...
- 机器人机构学的数学基础——绪论
- java请求菜鸟快递接口返回乱码
- 用Python可视化18万条《八佰》影评,看看观众怎么说?
- 面向毕业、职称的SCI论文高效写作方法
- 【算法设计与分析】分支限界法解决单源最短路径问题:输入带权图G=(V,E)以及出发顶点s,然后用分支限界法解决问题,要求输出路径和长度以及计算时间;
- Word中更新图表所有的域
- arcgis如何打开tif_ArcGIS的目录、内容列表的布局
- Ix Chariot测试路由器流程
- 直播|BIA Separations 和元生物两位大咖关于质粒DNA的制造工艺和质量控制