nonlocal在python中的用法
nonlocal在python中的用法
关于这个nonlocal在python中的用法方面的讲解,一定能解决您的问题的,一起来了解吧!
今天我们要讲的是关于作用域的关键词:nonlocal
太长有空再看,先来看个大概
- nonlocal 的面貌
- nonlocal 多了解一点
- 如何工作
- 与global有关系吗?
- 要注意点啥
nonlocal的面貌

闪亮登场
让我们从故事开始讲起。
有一个古老的图书馆,每一本书都是一个函数,书架就像是函数的作用域,而 nonlocal 关键词则是一个特殊的通行证,它允许你在一个函数里修改另一个嵌套函数中的变量。
但这不是随随便便就能做的事, nonlocal 声明的是那些既不属于局部作用域,也不属于全局作用域的变量,它们处于嵌套函数的中间地带。
在 Python 的世界里,函数可以嵌套函数,就像盒子套盒子一样。通常情况下,每个盒子(函数)里的东西(变量)只能在自己的盒子里被找到和修改。
但有时候,内层的小盒子想要去改变外层盒子里的某个东西,这时候就需要用到 nonlocal 这个法术了。
nonlocal的本质
nonlocal 的存在像是一条隐形的桥,连接着嵌套函数之间的变量。
要理解 nonlocal ,得先搞清楚Python里的作用域和变量。简单来说,作用域决定了在哪些地方你可以访问哪些变量。(我们马上就会说什么是作用域~)
在Python中,函数就像是一个小盒子,里面定义的变量默认只在盒子里有效,外面是访问不到的。
nonlocal 的魅力在于它提供了一种微妙的方式来修改嵌套作用域中的变量。
这在编写闭包或者装饰器等高级功能时特别有用。它让变量的作用域既不是那么封闭也不是无限开放,而是在一个合适的层级中进行操作。
nonlocal多了解一点
必须在外层非全局作用域中定义
nonlocal 关键字的一个核心特性是,它声明的变量必须已经存在于外层函数的作用域中,而不能是全局作用域或当前作用域中新定义的。
这就像是在一个家族聚会中,你只能通过 nonlocal 声明去引用那些已经到场的家族成员(变量),而不是那些根本没来(未定义)或者是全家族都知道的大名人物(全局变量)。
不能用于全局变量或最外层函数
nonlocal 的设计初衷是为了解决嵌套函数间变量共享的问题,而全局变量本来就对所有函数可见,没有必要用 nonlocal 来声明。
如果你试图在最外层函数中使用 nonlocal 声明变量,Python 会抛出一个语法错误,因为 nonlocal 需要一个封闭的函数作用域来寻找相应的变量,而最外层函数没有“外层”了。
相关阅读
-
域名备案流程及步骤 个人域名备案流程详细
一篇很详细的教程是关于域名备案流程及步骤和个人域名备案流程详细方面的讲解,一起来了解了解吧。 上一篇文章中我们讲了怎么注册域名,现在我们来讲解域名怎么备案。在中国,域名的
-
网站首页图片怎么做的 网页设计图片的模板
跟大家说一说网站首页图片怎么做的和网页设计图片的模板的IT小经验,接下来一起来看看吧。 PS制作华丽大气的游戏网站主页图片 制作主页是一项非常复杂的工作,跟创意合成有点类似。首
-
Spring事务详解 深入解析Spring的事务机制
关于Spring事务详解方面的内容,一起来看看吧! Spring 的事务一直是面试官经常询问的一个话题,但很多人只知道@ Transactional这个注解,但对Spring的事务体系,实现方式等方面却知之甚少,本文
-
zk在kafka中的作用
小编带来的是zk在kafka中的作用方面的内容,一定能解决您的问题的,一起来了解吧! /brokers/ids :临时节点,保存所有broker节点信息,存储broker的物理地址、版本信息、启动时间 等,节点名称


