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不能改变全局变量

链接: 引用.

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

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

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


相关推荐

  • PHP实现各种经典算法

    PHP实现各种经典算法

    2022年2月23日
    39
  • 根据sessionid获取session对象_sessionattributes注解

    根据sessionid获取session对象_sessionattributes注解session.setAttribute(“sessionName”,Object);用来设置session值的,sessionName是名称,object是你要保存的对象。session.getAttribute(“sessionName”);用来得到对应名称的session值,即得到object对象,注意需要进行类型转换!

    2022年10月7日
    6
  • Python中如何求列表list的平均数[通俗易懂]

    Python中如何求列表list的平均数当列表list中只包含数字时,如何求取它的平均数:fromnumpyimport*a=[52,69,35,65,89,15,34]b=mean(a)print(b)运行结果:51.285714285714285…

    2022年4月9日
    179
  • 蒙特卡洛方法学习(一)[通俗易懂]

    蒙特卡洛方法学习(一)[通俗易懂]转载:http://www.ruanyifeng.com/blog/2015/07/monte-carlo-method.html蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,

    2022年8月6日
    7
  • IntelliJ IDEA 2022 JetbrainsIdesCrack 激活码【2022免费激活】

    (IntelliJ IDEA 2022 JetbrainsIdesCrack 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~HC…

    2022年4月1日
    466
  • 从入门到高级Java书籍推荐

    从入门到高级Java书籍推荐前言不管你是转行来学习Java编程,还是你本来就是计算机专业并且继续在这一领域深耕的。除了,大学专业课程的学习以及工作中的实践之外;业余时间的充电,成了技术人员提升自己的必选之路。有的人选择利用金钱换来时间去报学习班培训,有的人利用自学。那么,自学的方法很多种:阅读书籍资料、网上各种技术论坛博客、视频教程等。个人认为,学习一门技术知识掌握的时间快慢:工作(项目)实战>技术培训&…

    2022年6月25日
    22

发表回复

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

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