第二十六章、闭包
1. 闭包(Closure)
什么是闭包
闭包是指一个函数(称为嵌套函数)引用了其外部函数作用域内的变量,并且该外部函数已经执行完毕(即其作用域理论上应该被销毁),但嵌套函数仍然可以访问这些变量。闭包的核心特点是“跨作用域引用”。
在本质上,闭包是将内部嵌套函数和函数外部的执行环境绑定在一起的对象。
闭包形成条件
闭包的三个必要条件:
- 一个函数内部定义了另一个函数。
- 嵌套函数内部引用了外部函数的变量。
- 外部函数返回嵌套函数(或将其传递到其他作用域)。
闭包示例
def make_power(y):
def fn(x):
return x ** y
return fn
pow2 = make_power(2)
print("5的平方是:", pow2(5))
pow3 = make_power(3)
print("6的立方是:", pow3(6))
闭包的优缺点
优点
- 闭包可以替代全局变量,将数据隐藏在函数内部,避免污染全局命名空间。
- 闭包可以记住函数调用之间的状态,适用于需要记忆功能的场景。
- Python 的装饰器就是基于闭包实现的,可以动态增强函数功能。
缺点
- 闭包会长期持有外部变量,可能导致内存无法释放。
- 过度使用闭包可能导致代码难以理解,尤其是多层嵌套时。
- 闭包的变量隐藏在嵌套函数中,调试时可能难以追踪。