Python中的闭包
闭包(closure)是编程语言领域里一个专有名词。
在 Python 中,闭包指的是由函数及其相关的引用环境组合而成的一个整体(即封闭的函数)。
闭包的一个关键特性是即使离开了创建它的环境,闭包仍然可以访问那个环境的变量。
正常情况下,当 Python 完成一次函数执行后,本次使用的局部变量都会在调用结束后被回收,无法继续访问。但是,如果使用函数套函数
的方式,在外层函数执行结束后,返回内部函数,后者就可以继续访问前者的局部变量,形成一个闭包
结构。
为了形成闭包,需要满足以下条件:
- 必须有一个内部函数,它引用外部函数的变量。
- 外部函数返回了这个内部函数。
下面是一个闭包的简单例子:
def make_multiplier(x):
def multiplier(n):
return x * n
return multiplier
# 创建一个闭包,这里的 times3 是一个函数,它记住了 x 的值 3
times3 = make_multiplier(3)
print(times3(10)) # 输出 30
print(times3(60)) # 输出 60
# 调用 make_multiplier 返回的结果函数,可以继续访问本该释放的 x 变量
make_multiplier 函数创建并返回了一个 multiplier 函数。
multiplier 函数是一个内部函数,它引用了外部函数 make_multiplier 的参数x
。
即使 make_multiplier 函数已经执行完成,times3 仍然记住了x
的值,因为它是闭包。
闭包常用于创建只有特定函数可以访问的私有变量或函数。这是一种封装数据的方法,可以防止全局命名空间的污染,同时提供了一种对象的替代方法。
闭包还有很多高级应用,比如装饰器(decorators)就是使用闭包的一个例子。在Python中,装饰器本质上是一个返回另一个函数的函数,它通常修改或扩展了原始函数的行为。