闭包(Closure)指的是一个函数,这个函数捕获了定义时在其外部作用域中的一些变量。 实现闭包的通常方法是在一个函数 A 里面定义另一个函数 B,在函数 B 中可以对函数 A 的局部变量进行访问(词法作用域)。
使用闭包的目的一般有:
- 创建数据隐藏和封装实例:类似于 OOP 中的对象和方法
- 创建工厂函数:生成配置不同的函数
- 延迟计算:延迟执行某些操作
下面的例子展示了如何使用闭包维护一个局部变量的状态:
def make_counter():
count = 0
def counter():
nonlocal count # 声明 count 是外部函数的局部变量
count += 1
return count
return counter
# 局部定义函数在它们返回时仍旧持有所关联的环境 (count)
my_counter = make_counter()
# 调用闭包函数
print(my_counter()) # 输出 1
print(my_counter()) # 输出 2
print(my_counter()) # 输出 3