首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python nonlocal的用法_python nonlocal 的具体原理

很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的 “nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量” 看完以后我感觉自己是懂了,但光从这句话来说还没完全理解它的真实含义...nonlocal def make_average(): series=[] def average(new_value): series.append(new_value) total = sum(series...closure__[0].cell_contents 里面存储series里的数据 但如果把series改为了int 类型的不可变类型在average里面尝试改变它的值时就会报错,这时候如何处理,就需要加nonlocal...,它的作用就是变量申明为自由变量 结论: 如果在内部函数中只是仅仅读外部变量,可以不在此变量前加nonlocal 如果在内部函数中尝试进行修改外部变量,且外部变量为不可变类型,则需要在变量前加nonlocal...,如果变量为可变类型,则不需要添加nonlocal 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

40030
您找到你想要的搜索结果了吗?
是的
没有找到

Python Global和Nonlocal的用法

nonlocal 和 global 也很容易混淆。简单记录下自己的理解。 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值。...nonlocal 只在闭包里面生效,作用域就是闭包里面的,外函数和内函数都影响,但是闭包外面不影响。 nonlocal 语句使列出的标识符引用除global变量外最近的封闭范围中的以前绑定的变量。...nonlocal语句中列出的名称与global语句中列出的名称不同,它们必须引用封闭范围中已经存在的绑定(无法明确确定应在其中创建新绑定的范围)。...'x' found ---- 使用nonlocal之前需要初始化变量 x = 0 def outer(): def inner(): nonlocal x x...'x' found ---- 不能在函数的外部函数里面声明nonlocal x = 0 def outer(): x = 1 nonlocal x def inner():

33820

Python Global和Nonlocal的用法

nonlocal 和 global 也很容易混淆。简单记录下自己的理解。 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值。...nonlocal 只在闭包里面生效,作用域就是闭包里面的,外函数和内函数都影响,但是闭包外面不影响。 nonlocal 语句使列出的标识符引用除global变量外最近的封闭范围中的以前绑定的变量。...nonlocal语句中列出的名称与global语句中列出的名称不同,它们必须引用封闭范围中已经存在的绑定(无法明确确定应在其中创建新绑定的范围)。...'x' found ---- 使用nonlocal之前需要初始化变量 x = 0 def outer(): def inner(): nonlocal x x...'x' found ---- 不能在函数的外部函数里面声明nonlocal x = 0 def outer(): x = 1 nonlocal x def inner():

39910

Python3 关键字nonlocal

关键字nonlocal 在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。...为了解决这个问题,Python 3.x引入了nonlocal关键字,在闭包内用nonlocal声明变量,就可以让解释器在外层函数中查找变量名。...如果想更改它,这里就要使用global关键字了 实例 关键字nonlocal的作用与关键字global类似,使用nonlocal关键字可以在一个嵌套的函数中修改嵌套作用域中的变量。...global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal...位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。

75910

Python: 关键字nonlocal和global的区别

关键字global用于定义全局变量,而关键字nonlocal用于定义非局部变量。...本文在查阅相关资料的基础上,对局部变量、全局变量和非局部变量进行了介绍,还对关键字global和nonlocal的使用场景进行了梳理。...3 非全局变量 (1) 非全局变量,通过关键字nonlocal来定义。只在闭包里面生效,作用域就是闭包里面的,外函数和内函数都影响,但是闭包外面不影响。...(2) nonlocal的作用范围仅对于所在子函数的上一层函数中拥有的局部变量,必须在上层函数中已经定义过,并且不是非全局变量,否则报错。...= make_counter() print(test()) print(test()) 运行结果: 1 2 在函数counter()内,我们使用了nonlocal关键字创建了非局部变量。

81320

python2 nonlocal_python关键字及用法

从当前作用域开始寻找变量,如果没找到就往上一层作用域寻找,没找到就再上一层…… 即:当前作用域局部变量->外层作用域变量->再外层作用域变量->……->当前模块全局变量->pyhton内置变量 global:全局变量 nonlocal...:外层嵌套函数的变量 使用总结: 1、局部作用域改变全局变量用global, global同时还可以定义新的全局变量 2、内层函数改变外层函数变量用nonlocalnonlocal不能定义新的外层函数变量...,只能改变已有的外层函数变量 同时nonlocal不能改变全局变量 一、没有关键字 a = 10 # a1 当前模块全局变量 def outer(): a = 9 # a2 当前outter...寻找 a = 10 # a1 当前模块全局变量 def outer(): def inner(): nonlocal a # 在当前作用域外层即outer局部作用域中没找到outer...局部变量a,outer外层为全局作用域,nonlocal不继续寻找,报错 a = 8 print(a) inner() print(a) outer()

24120

【globlal与nonlocal和闭包函数、装饰器、语法糖】

一、global与nonlocal 1、global 在py文件中,一般无法调用函数体内变量名,而global可使函数体代码内的变量名直接在函数体外部调用,条件是在需要调用的代码体中使用global 调用需要的变量名...name print(name) ------------------------------------------------------------------------ zhangzhang 2、nonlocal...在函数嵌套使用时,通常在父代码体中无法调用子代码中变量名, 而nonlocal的作用是,可以在父代码中直接调用子代码中的变量名,条件是需要在子代码中使用nonlocal 调用需要的变量名 未使用nonlocal...# 函数外层绑定一个变量名 name = 'kangkang' # 代码体内部再次定义一段函数体 def subcoat(): # 在函数体内层使用nonlocal...,调用变量名 nonlocal name # 内层中绑定变量名 name = 'zhangzhang' # 调用内层函数 subcoat

8610

【重学Python】Day4作用域,Python关键字global和nonlocal使用

【重学Python】Day4作用域,python关键词global和nonlocal使用 一、概念 二、全局变量和局部变量 三、global和nonlocal关键字 四、使用场景 1、在函数内部修改全局变量...比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。 G(Global):当前脚本的最外层,比如当前模块的全局变量。...total sum(1,2) print('函数外total是全局变量, 值:',total) 输出 函数内total是局部变量,值: 3 函数外total是全局变量, 值: 0 三、global和nonlocal...使用 nonlocal 关键字可以在闭包中修改外部变量的值。...def outer(): x = 10 def inner(): nonlocal x x += 5 return x return

7310
领券