闭包的使用场景

闭包的使用场景

有时需要保存函数中的变量,并在后续调用中重复使用它(形成“带状态的函数”)。例如:在某个初始值基础上不断累加、带固定前缀的日志打印器、预先配置好参数的函数工厂等。

闭包的作用:可以保存函数内的变量,不会随着函数调用完而销毁

典型场景 1:累加器(保存内部状态)

def make_adder(base):
    total = base

    def add(x):
        nonlocal total
        total += x
        return total

    return add


adder = make_adder(10)
adder(1)
adder(5)

典型场景 2:函数工厂(预先配置参数)

def make_multiplier(k):
    def mul(x):
        return x * k
    return mul


double = make_multiplier(2)
double(21)

与装饰器的关系

很多装饰器本质上就是“接收函数并返回新函数”的闭包(见 装饰器 / 装饰器的执行流程图)。

关联:闭包 / 闭包的使用 / 闭包内修改外部变量 / 局部变量和全局变量