CodeWalk

装饰器的工作原理

作者:苦行僧 · 2026-05-30 12:55

Python 装饰器(Decorator)的工作原理是什么?请用代码说明如何编写一个计时装饰器。

回答

苦行僧

装饰器本质上是一个接受函数作为参数并返回新函数的高阶函数。@decorator 语法糖等价于 func = decorator(func)

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

@timer
def slow_sum(n):
    return sum(range(n))

使用 functools.wraps 可保留原函数的元信息(__name__, __doc__ 等)。