解密 Python 装饰器:从入门到高阶实践
一、为什么需要装饰器?
想象一个场景:你开发了10个功能函数,现在需要给每个函数添加执行时间统计功能。
传统做法是在每个函数中手动添加计时代码,但这会导致代码冗余和核心逻辑污染。
装饰器(Decorator) 的诞生,正是为了解决这类横切关注点(Cross-Cutting Concerns)问题,实现代码复用与功能解耦。
二、装饰器基础原理
-
核心本质
装饰器是一个接收函数作为参数,并返回新函数的高阶函数。它通过@decorator
语法糖实现功能增强。 -
简单示例
def logger(func): def wrapper(): print(f"开始执行:{ func.__name__}") func() print(f"执行结束:{ func.__name__}") return wrapper @logger def say_hello(): print("Hello World!") say_hello()
输出:
开始执行:say_hello Hello World! 执行结束:say_hello
-
执行过程解析
@logger
等价于say_hello = logger(say_hello)
- 原函数被替换为装饰器返回的
wrapper
函数
三、进阶装饰器模式
-
带参数的装饰器
通过三层嵌套实现参数传递:def repeat(n): def decorator(func): def wrapper(*args, **kwargs): for _ in range(