01什么是闭包,闭包的核心构成条件有哪些?
问题: 什么是闭包,闭包的核心构成条件有哪些?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
闭包的工作机制
当外层函数执行完毕并返回内层函数时,外层函数的局部变量本应被回收,但由于内层函数持有对它们的引用,Python 会将这部分变量连同内层函数一起打包成一个“闭包单元”,存入内层函数的 __closure__ 属性中。此后每次调用内层函数,都能访问到这些“冻结”的环境变量。
核心代码示例
1 | def outer(x): |
闭包 vs 普通嵌套函数对比
| 维度 | 普通嵌套函数 | 闭包 |
|---|---|---|
| 引用外层变量 | 可能引用,但外部无法持有 | 内层函数被返回并持有引用 |
| 外层执行后变量状态 | 全部释放 | 被内层函数保留(cell 对象) |
| 后续调用可访问外层变量 | 否 | 是 |
闭包的应用场景
- 装饰器(最常用):利用闭包保存被装饰函数和配置参数。
- 工厂函数:根据不同参数生成不同行为的函数(如
make_power(2)生成平方函数)。 - 数据隐藏 / 私有状态:通过闭包模拟私有变量,避免全局暴露。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!