返回顶部
首页 > 资讯 > 后端开发 > Python >【python】nonlocal的详解
  • 629
分享到

【python】nonlocal的详解

python 2023-10-01 10:10:28 629人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

官网的nonlocal的用法 1,非局部声明变量指代的已有标识符是最近外面函数的已声明变量,但是不包括全局变量。这个是很重要的,因为绑定的默认行为是首先搜索本地命名空间。nonlocal声明的变量只对

官网的nonlocal的用法
1,非局部声明变量指代的已有标识符是最近外面函数的已声明变量,但是不包括全局变量。这个是很重要的,因为绑定的默认行为是首先搜索本地命名空间。nonlocal声明的变量只对局部起作用,离开封装函数,那么该变量就无效。
2,非局部声明不像全局声明,我们必须在封装函数前面事先声明该变量
3,非局部声明不能与局部范围的声明冲突

第一点:

count = 1 # 这里是声明的是全局变量,对于nonlocal来说全局变量是不包括的def a():    count = 'a函数里面' # 这里对于nonlocal来说就是外面的函数已声明的变量    def b():        nonlocal count # nonlocal count指的是函数b内        print(count)        count = 2    b()    print(count)if __name__ == '__main__':    a()    print(count)
count = 1def a():    # count = 'a函数里面' # SyntaxError: no binding for nonlocal 'count' found    def b():        nonlocal count        print(count)        count = 2    b()    print(count)if __name__ == '__main__':    a()    print(count)

像上面的代码,如果nonlocal执行前,没有在局部里先声明局部变量,就会报错找不到局部变量,因为nonlocal是不会查全局变量。

nonlocal的作用:
1,nonlocal可以让最里面的函数使用最近的一个外函数已声明的变量,将最里面的函数的局部变量设置和最近的一个外函数声明的变量为同一个变量(引用同一个内存地址)。例如下面的代码,c函数声明了nonlocal count,那么c函数就可以用最近函数b声明的count=2,并且可以对b.count赋值。(注意:nonlocal不会使用全局变量)

count = 1def a():    count = 'a函数里面'    def b():        count = 2        print(count)        def c():            nonlocal count            print(count)        c()    b()    print(count)if __name__ == '__main__':    a()    print(count)
22a函数里面1

案例:引用官网的例子对global,nonlocal,全局变量的关系解释

def scope_test():    def do_local():        spam = "local spam"    def do_nonlocal():        nonlocal spam        spam = "nonlocal spam"    def do_global():        global spam        spam = "global spam"    spam = "test spam"    do_local()    print("After local assignment:", spam)    do_nonlocal()    print("After nonlocal assignment:", spam)    do_global()    print("After global assignment:", spam)scope_test()print("In global scope:", spam)
After local assignment: test spamAfter nonlocal assignment: nonlocal spamAfter global assignment: nonlocal spamIn global scope: global spam

上面案例代码看出:

1,do_local函数下定义的局部变量spam不会改变scope_test函数定义的局部变量spam。
2,do_nonlocal函数下nonlocal非本地声明,将do_nonlocal函数下的局部变量spam声明为非do_nonlocal函数本地,而是将do_nonlocal.spam声明和scope_test.spam为同一个变量。
3,do_global函数下global全局声明spam为全局变量,但是依然不会改变scope_test.spam的局部变量,说明global全局声明对局部的变量不产生作用。
4,在全局引用全局声明global的全局变量spam是可以的。

来源地址:https://blog.csdn.net/weixin_40476683/article/details/128399518

--结束END--

本文标题: 【python】nonlocal的详解

本文链接: https://lsjlt.com/news/422204.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【python】nonlocal的详解
    官网的nonlocal的用法 1,非局部声明变量指代的已有标识符是最近外面函数的已声明变量,但是不包括全局变量。这个是很重要的,因为绑定的默认行为是首先搜索本地命名空间。nonlocal声明的变量只对...
    99+
    2023-10-01
    python
  • Python嵌套函数与nonlocal使用详细介绍
    目录嵌套函数嵌套函数中变量的范围nonlocal使用nonlocal的优点缺点举例多层嵌套中的nonlocal嵌套函数中局部变量的重用理解闭包之前,我们首先需要理解什么是嵌套函数(n...
    99+
    2024-04-02
  • Python中关键字nonlocal和global的声明与解析
    一、Python中global与nonlocal 声明 如下代码 a = 10 def foo(): a = 100 执行foo() 结果 a 还是10 函数中对变量的赋值,变量始终绑...
    99+
    2022-06-04
    关键字 声明 Python
  • Python nonlocal关键字 与 global 关键字解析
    目录1.nonlocal2.globalpython引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 1.no...
    99+
    2024-04-02
  • Python关键字之global与nonlocal
    目录Python关键字 global与nonlocalglobalnonloacl总结Python关键字 global与nonlocal global def test(): #...
    99+
    2024-04-02
  • Python关键字global与nonlocal怎么用
    这篇文章主要讲解了“Python关键字global与nonlocal怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python关键字global与nonlocal怎么用”吧!Pytho...
    99+
    2023-06-29
  • Python局部函数及用法(含nonlocal关键字)
    目录Python局部函数及用法Python局部函数及用法 通过前面的学习我们知道,Python 函数内部可以定义变量,这样就产生了局部变量,有读者可能会问,Python 函数内部能定...
    99+
    2022-12-26
    Python局部函数 Python局部函数用法 Python nonlocal关键字
  • Python中nonlocal关键字与global关键字怎么用
    小编给大家分享一下Python中nonlocal关键字与global关键字怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python引用变量的顺序: 当前作...
    99+
    2023-06-29
  • 怎么理解Python动态参数、命名空间、函数嵌套、global和nonlocal
    本篇内容主要讲解“怎么理解Python动态参数、命名空间、函数嵌套、global和nonlocal”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Python动态参数、命名空间、函数嵌套、...
    99+
    2023-06-02
  • Python的Cookie详解
    一、介绍啥是cookie 当用户通过浏览器首次访问一个域名时,访问的web服务器会给客户端发送数据,以保持web服务器与客户端之间的状态保持,这些数据就是cookie,它是Internet站点创建的,为了辨别用户身份而储存在用户...
    99+
    2023-01-31
    详解 Python Cookie
  • python unicode详解 python中的unicode
    在Python中,Unicode是一种字符编码标准,它为全球范围内的所有字符提供了唯一的标识符。Unicode编码由一个固定的编码空...
    99+
    2023-08-24
    python
  • Python 中的 else详解
    我们都知道 Python 中else的基本用法是在条件控制语句中的 if...elif...else...,但是 else 还有两个其它的用途,一是用于循环的结尾,另一个是用在错误处理的 try 中。这原本...
    99+
    2022-06-04
    详解 Python
  • python的继承详解
    目录1、单继承:子类只继承一个父类2、多继承:子类继承多个父类3、子类重写父类的同名属性和方法4、子类调用父类同名属性和方法5、 6、调用父类方法super()总结1、单继...
    99+
    2024-04-02
  • python 中的 super详解
    目录super 的完整形式super 的使用提到 super,最直接的想法就是它代表了父类,替父类执行某些方法。但是理解也仅止步于此,下面对 super 做进一步理解 super 的...
    99+
    2024-04-02
  • python中的unicode详解
    Unicode是一种字符编码标准,它定义了世界上几乎所有字符的唯一编号和名称。Unicode编码标准旨在解决传统字符编码标准(如AS...
    99+
    2023-09-23
    python
  • 详解python的循环
    目录range函数的使用第一种创建方式第二种创建方式第三种创建方式判断指定的数有没有在当前序列中循环结构总结 range函数的使用 作为循环遍历的对象 第一种创建方式 r=ra...
    99+
    2024-04-02
  • 详解Python中的List
    目录什么是list?list 可以进行哪些操作呢?动态长度参数传递参数是否会被函数攥改?list 这种对象能执行啥操作?tuple 转list说这么多,好像漏了点啥?遍历列表还没有展...
    99+
    2024-04-02
  • 详解Python中的List2
    目录list比tuple多了这些操作支持除了删除,list怎么添加/扩充元素呢?list的排序总结list比tuple多了这些操作支持 前面学委提到tuple(元组)就是焊死了的一串...
    99+
    2024-04-02
  • 详解Python中的Dict
    目录什么是dict?我们下面看看dict的增删查改总结什么是dict? dict全称为dictionary(字典),人如其名,像字典一样可以根据索引定位到特定的文字。 在python...
    99+
    2024-04-02
  • 详解python的变量
    目录1.Python 变量的概述:2.Python 变量的命名3.Python 变量赋值3.1 Python 变量赋值概述3.2 Python 变量的基本赋值格式3.3 Python...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作