python2 nonlocal_python unboundlocalerror

python2 nonlocal_python unboundlocalerrornonlocal关键字用来在函数或其他作用域中使用并修改外层(非全局)变量。意义:nonlocal使用能够弥补global和闭包的两个问题。对于global,只能使用全局变量,对于嵌套函数中的内层函数而言,无法通过global使用外层函数,通过nonlocal就可以,当然直接读取也可以(闭包)。对于闭包,内层函数可以读取外层函数的变量,但是如果在内部函数中尝试进行修改外部变量,且外部变量为不可变类型,则需要在变量前加nonlocal,如果变量为可变类型,则不需要添加nonlocal。”’nonl

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

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

nonlocal关键字用来在函数或其他作用域中使用并修改外层(非全局)变量(逐层到外面作用域找,直到全局作用域之前的局部作用域)。

意义:nonlocal使用能够弥补global和闭包的两个问题。
对于global,只能使用全局变量,对于嵌套函数中的内层函数而言,无法通过global使用外层函数,通过nonlocal就可以,当然直接读取也可以(闭包)。
对于闭包,内层函数可以读取外层函数的变量,但是如果在内部函数中尝试进行修改外部变量,且外部变量为不可变类型,则需要在变量前加nonlocal,如果变量为可变类型,则不需要添加nonlocal。

''' nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。 '''
def work():
    x = 0
    def new_work():
        nonlocal x
        x=x+3
        return x
    return new_work
         
f=work()
print(f())
print(f())
print(f())
'''打印结果 3 6 9'''
''' 使用global 实现 '''
a =0
def new_work():
    global a
    a=a+3
    return a
print(new_work())
print(new_work())
print(new_work())
''' 打印结果 3 6 9 '''
''' 闭包= 函数+环境变量 '''
 
def dosometing():
    a =25
    def add(x):
        d=a+x
        return d
    return add
a = 10
f=dosometing()
print(f(5))
print(f(5))
print(f(5))
''' 打印结果 30 35 40 '''

使用总结:

1、局部作用域改变全局变量用global, global同时还可以定义新的全局变量

2、内层函数改变外层函数变量用nonlocal, nonlocal不能定义新的外层函数变量,只能改变已有的外层函数变量

3、同时nonlocal不能改变全局变量

链接: 引用.

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196739.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SBC应用「建议收藏」

    SBC应用「建议收藏」在VoIP呼叫中主要使用会话发起协议(SIP),H.323和MGCP呼叫信令协议,Sbc在主叫和被叫的信令/媒体路径之间引入。通常,SBC隐藏网络拓扑,接管呼入并生成到新的请求分支到被叫。技术上叫做背靠背B2BUA;这样做的好处是信令流和媒体流都能得到SBC控制。方便处理录音、生成保持背景音乐等媒体相关的处理;假如SBC不具备媒体服务的处理能力,也能够转发媒体流…

  • iec101规约解析_CDT规约

    iec101规约解析_CDT规约对于点对点和多个点对点的通道结构,主站或子站复位后首先进行初始化,总召唤和时钟同步后系统转入正常,然后在循环召唤2级用户数据的序列中定期插入按照分组召唤方式和按顺序收集各组数据进行召唤。在子站回送的报文中如果ACD=1,则立即收集1级用户数据,1级用户数据收集完后,转向上述循环询问过程,此种循环召唤过程可以被中断,如被召唤电度、遥控等。平衡式传输除具有非平衡式传输的各种报文外,在特定情况下子站还可以作为启动站,主动向主站发送报文。即:“问答+循环”,问答式,同非平衡式,循环,即子站定时主动上送信息。….

    2022年10月31日
  • phpstorm 激活码 2021 3月最新注册码

    phpstorm 激活码 2021 3月最新注册码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 常用的快捷键 MAC IDEA (mac os X 10.5 )

    常用的快捷键 MAC IDEA (mac os X 10.5 )

  • 留言板asp源码下载_网页留言板源码

    留言板asp源码下载_网页留言板源码用ASP+access+FrontPage实现留言板有几种方法??只需要写出简单思路,.首先,留言页面。其次,留言数据处理页面,该页面把数据插入到数据库中。再次,从数据库中选取数据出来。最后,显示出来。。哪位高手可以帮我做个简单初学者ASP留言板!明天早晨急需!扣扣。这个是简单的留言板代码,数据库就要你自己设计了,网页代码是:已经做得了大概~还有删除和修改没完成~请高手帮助~既然别的…

  • linux设置crontab任务_定时任务crontab每天7点执行

    linux设置crontab任务_定时任务crontab每天7点执行   在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps-ef|grepcron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“crontable”的简写。一、cron服务  cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。  servicecrondstar…

发表回复

您的电子邮箱地址不会被公开。

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