← 返回首页
叶知秋
2026年5月20日 16:45

Python 装饰器深入理解

🔒 此动态需要密码才能查看

先从闭包说起

在理解装饰器之前,必须先理解闭包。闭包是指一个函数记住了其外部作用域的变量,即使外部函数已经执行完毕。

def outer(x):
    def inner(y):
        return x + y
    return inner

add_5 = outer(5)
print(add_5(3))  # 8

装饰器基础

装饰器本质上是一个接受函数作为参数并返回新函数的高阶函数:

def timer(func):
    import time
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} took {time.time() - start:.4f}s")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(1)

slow_function()

带参数的装饰器

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def greet():
    print("Hello!")

greet()  # 打印三次 Hello!

总结

装饰器是 Python 函数式编程特性的集大成者,在日志记录、性能监控、权限校验等场景中有着广泛应用。

Python装饰器函数式
P

Pythonista 写得很清晰,终于搞懂了带参装饰器

2026-05-20 18:00