02如何写一个简单的闭包函数,举例说明?
文章目录
问题: 如何写一个简单的闭包函数,举例说明?
👇 点击展开/折叠 面试背诵模板(建议先背这个)
闭包三步走结构
| 步骤 | 代码位置 | 说明 |
|---|---|---|
| ① 定义外层函数 | def outer(x): |
外层函数接收外部参数或定义局部变量 |
| ② 定义内层函数 | def inner(y): return x + y |
内层函数引用了外层变量 x(自由变量) |
| ③ 返回内层函数 | return inner |
外层函数将内层函数对象返回,供外部调用 |
完整代码示例
1 | def outer(x): |
验证闭包捕获了什么
1 | print(add5.__closure__) # (<cell at 0x...: int object at 0x...>,) |
闭包 vs 普通函数对比
| 维度 | 普通函数 | 闭包 |
|---|---|---|
| 参数来源 | 仅来自调用时传入 | 调用时传入 + 捕获的外层变量 |
| 状态保持 | 每次调用独立,无记忆 | 捕获的变量持久存在,可累积状态 |
| 数据隔离 | 全局变量可能冲突 | 每个闭包独立捕获,互不干扰 |
闭包捕获变量的注意事项
1 | # ⚠️ 注意:捕获的是变量引用,不是值 |
修改捕获的变量:nonlocal 声明
1 | def counter(): |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LGQ的博客!