Python 闭包详解

闭包是指能够访问外部作用域变量的函数。

1. 基本闭包

def outer():
    x = 10
    
    def inner():
        print(x)
    
    return inner

func = outer()
func()  # 10

2. 带参数的闭包

def make_multiplier(n):
    def multiplier(x):
        return x * n
    return multiplier

double = make_multiplier(2)
print(double(5))  # 10

triple = make_multiplier(3)
print(triple(5))  # 15

3. 计数器

def make_counter():
    count = 0
    
    def counter():
        nonlocal count
        count += 1
        return count
    return counter

c = make_counter()
c()  # 1
c()  # 2
c()  # 3

4. 装饰器本质

def logger(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

5. 注意事项

# nonlocal 声明
def outer():
    x = 10
    
    def inner():
        nonlocal x  # 声明修改外部变量
        x = 20
    
    inner()
    print(x)  # 20

闭包是函数式编程的重要组成部分。