Appearance

Python中的闭包

geekbing2023-10-21Python闭包

闭包(closure)是编程语言领域里一个专有名词。

在 Python 中,闭包指的是由函数及其相关的引用环境组合而成的一个整体(即封闭的函数)。

闭包的一个关键特性是即使离开了创建它的环境,闭包仍然可以访问那个环境的变量。

正常情况下,当 Python 完成一次函数执行后,本次使用的局部变量都会在调用结束后被回收,无法继续访问。但是,如果使用函数套函数的方式,在外层函数执行结束后,返回内部函数,后者就可以继续访问前者的局部变量,形成一个闭包结构。

为了形成闭包,需要满足以下条件:

  1. 必须有一个内部函数,它引用外部函数的变量。
  2. 外部函数返回了这个内部函数。

下面是一个闭包的简单例子:

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中,装饰器本质上是一个返回另一个函数的函数,它通常修改或扩展了原始函数的行为。

上次更新 3/25/2024, 10:43:07 AM