python nonlocal的用法_python nonlocal 的具体原理[通俗易懂]

python nonlocal的用法_python nonlocal 的具体原理[通俗易懂]很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的“nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量”看完以后我感觉自己是懂了,但光从这句话来说还没完全理解它的真实含义nonlocaldefmake_average():series=[]defaverage(new_value):series.append(new_value)total=sum(s…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

很多文章都大概列了下nonlocal的具体用法,比如看到几篇文章写的

“nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量”

看完以后我感觉自己是懂了,但光从这句话来说还没完全理解它的真实含义nonlocal

def make_average():

series=[]

def average(new_value):

series.append(new_value)

total = sum(series)

return. total/len(series)

return averager

average = make_average()

average(10). -> 10

average(11). – >10.5

series 是make_average 的局部变量,当average=make_average()以后,make_average()已经返回了,本地作用域已经一去不返

其实在average函数中 series是自由变量,并未在本地作用域中绑定的变量

可以通过average__code__.co_varname 查看局部变量, average.__code__.co_freevars 查看自由变量

series 绑定在返回的average的__closure__属性中, average.__closure__, average__closure__[0].cell_contents 里面存储series里的数据

但如果把series改为了int 类型的不可变类型在average里面尝试改变它的值时就会报错,这时候如何处理,就需要加nonlocal ,它的作用就是变量申明为自由变量

结论:

如果在内部函数中只是仅仅读外部变量,可以不在此变量前加nonlocal

如果在内部函数中尝试进行修改外部变量,且外部变量为不可变类型,则需要在变量前加nonlocal,如果变量为可变类型,则不需要添加nonlocal

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196948.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FLAG_ACTIVITY_CLEAR_TOP的使用

    FLAG_ACTIVITY_CLEAR_TOP的使用本例使用FLAG_ACTIVITY_CLEAR_TOP退出整个应用程序:多activity中退出整个程序,例如从A->B->C->D,这时我需要从D直接退出程序。补充:finish()和system(0)都只能退出单个activity。我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在D窗口打开A窗口时在Intent中直接加入标志Int

    2022年7月17日
  • 海思Hi3798处理器参数,Hi3798芯片详细信息介绍[通俗易懂]

    海思Hi3798处理器参数,Hi3798芯片详细信息介绍[通俗易懂]Hi3798CV200集成4核64位高性能CortexA53处理器、内置NEON加速引擎,强大的CPU处理能力可以满足各种差异化的业务需求。在码流兼容性、在线视频播放的流畅性、图像质量以及整机性能方面保持业界最好的用户体验。支持4K2KP60@10bit超高清视频解码和显示,支持H.265/HEVC、H.264/AVC、AVS+、MVC、MPEG2、MPEG4、VC-1、VP6、VP…

    2022年6月30日
  • Matlab画图常用的符号和颜色

    Matlab画图常用的符号和颜色

    2022年5月6日
  • List集合转换成Json字符串

    List集合转换成Json字符串前言进行转换我们使用alibaba的jsonjar:com.alibaba.fastjson.jar1.导入依赖或者直接导入jar<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId&…

    2022年10月18日
  • 华为LLDP协议

    华为LLDP协议LLDP(LLDP,LinkLayerDiscoveryProtocol,链路层发现协议)是IEEE802.1AB中定义的第二层发现协议,可以使得不同厂商设备之间的企业或运营商通过该功能可以清楚的了解整个网络的拓扑结构[SW1]displaylldpneighborError:GlobalLLDPisnotenabled.//默认没有开启LLDP协议[R1]lldpenable//开启LLDP协议Info:GlobalLLDPisenabledsuccessfu

    2022年6月2日
  • 人工智能 猴子摘香蕉问题[通俗易懂]

    人工智能 猴子摘香蕉问题[通俗易懂]人工智能猴子摘香蕉问题1.定义描述环境状态的谓词。AT(x,w):x在w处,个体域:x{monkey},w{a,b,c,box};HOLD(x,t):x手中拿着t,个体域:t{box,banana};EMPTY(x):x手中是空的;ON(t,y):t在y处,个体域:y{b,c};BOX(u):u是箱子,个体域:u{box};BANANA(v):v是香蕉,个体域:v{banana};2.初始状态AT(monkey,a):猴子在a处EMPTY(monkey):猴子手中是空的O

    2022年9月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号