首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
【学习心得】Python的闭包
📅 2026/10/10 7:54:13
✍️ 爱科研究院
👁 阅读 3,247
〇、普通嵌套函数在python中普通的嵌套函数是指定义在另一个函数内部的函数。它是一个纯粹的语法结构概念。只需要满足“函数定义在函数内部”这一条件就可以了。嵌套函数在一个函数的函数体内部使用def关键字定义的函数。def outer(): print(外部函数开始) # 这就是一个普通的嵌套函数 def inner(): print(内部函数执行) inner() # 在外部函数内调用内部函数 print(外部函数结束) outer()一、闭包的定义在函数嵌套的前提下内部函数使用了外部函数的变量并且外部函数返回了内部函数我们就把这个使用外部函数变量的内部函数称为闭包。形成闭包的三个条件嵌套函数在函数嵌套的前提下引用外部变量内部函数使用了外部函数的变量还包括外部函数的参数外部函数返回内部函数外部函数将内部函数作为返回值返回def outer_func(message): # message 是外部函数的局部变量 def inner_func(): # 内部函数引用了外部函数的message变量 print(f消息内容{message}) # 返回内部函数对象注意不是调用 return inner_func # 创建闭包 my_closure outer_func(Hello!) # 此时outer_func已经执行解释但message变量并未销毁 my_closure()在闭包内可以使用nonlocal关键字来修改外部函数的变量。def outer_func(message): # messge是外部函数的局部变量 def inner_func(new_messageNone): nonlocal message # 声明message来自外部函数作用域而非创建新的局部变量 if new_message is not None: message new_message print(f消息内容{message}) return inner_func # 创建闭包 my_closure outer_func(Hello!) my_closure() # 输出消息内容Hello! my_closure(hi) # 输出消息内容hi my_closure() # 输出消息内容hi 此时message的状态已经内持久化修改了二、普通嵌套函数和闭包的区别判断一个函数是不是闭包可以通过检查函数的__closure__属性print(my_closure.__closure__) # 输出类似: (cell at 0x...: str object at 0x...,) # 如果为 None则不是闭包特征普通嵌套函数闭包定义位置函数内部函数内部引用外部变量不一定需要必须引用返回到外部通常只在内部调用必须返回或传递出去生命周期随外部函数调用结束而销毁外部函数结束后仍可存活__closure__属性None包含 cell 对象的元组本质语法结构 / 作用域组织手段数据对象函数环境闭包 函数 其引用的外部环境。它是 Python 实现高阶编程、函数式编程风格的重要基石。三、闭包有什么用闭包在python中的核心价值在于它提供了一种轻量化的状态保持与行为定制机制。相比于使用类Class或者全局变量闭包在特定场景下更加简洁、安全且符合函数式编程范式。以下是闭包的主要使用场景Python 的装饰器本质上就是闭包。它允许你在不修改原函数代码的前提下动态地添加日志、权限校验、缓存、重试等功能。替代简单的类进行轻量级状态封装。当你只需要一个带有状态的函数而不需要完整的面向对象设计时闭包比类更简洁。用在回调函数与延迟执行。在事件驱动编程、异步任务、GUI 编程中闭包可以让回调函数“记住”创建时的上下文避免传递大量参数或使用全局变量。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/10 7:54:13
Codex反复重连5/5?从心跳机制到日志定位的完整排查指南
2026/10/10 7:49:13
QCADOO开源MES落地实战:从工单报工到并发防超报的避坑指南
2026/10/10 7:49:12
PowerStore存储升级实录:容量翻倍、文件服务与灾备能力增强
2026/10/10 8:39:24
妙手ERP是什么?妙手核心功能、适用场景及妙手优惠折扣码渠道
2026/10/10 8:39:24
400MB 内存真的算高吗?native-feel-skill 揭示的 6 个内存测量真相:如何正确测量与优化桌面应用内存
2026/10/10 8:39:24
React、Vue、Astro一次打通:Cuelume框架集成与SPA路由换页音完整指南
2026/10/10 8:39:24
私人专用电脑软件
2026/10/10 8:39:24
在PADS上实现PCB的3D设计
2026/10/10 8:34:24
简谱拍号全解析:从单拍子到散拍子,搞懂节奏骨架
2026/10/10 0:03:38
工业软件标准化路线图:国产替代的落地施工图
2026/10/10 0:03:38
VCMI安卓版实操指南:原生运行英雄无敌3的3步技术落地
2026/10/10 0:03:38
稀疏多通道盲反褶积的MATLAB算法实现与参数调优
2026/10/10 3:42:06
Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化
2026/10/10 3:42:01
多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系
2026/10/10 3:41:58
hindsight:面向LLM应用的事后可观测性工程实践
2026/10/10 3:41:56
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/10 3:41:54
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/9 11:36:17
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)