Python装饰器:让代码优雅如诗
——5分钟掌握你的第一个“魔法语法糖”
引言
你是否曾为重复计算函数执行时间而写下冗余代码?或希望给函数添加日志却不想修改原函数逻辑?Python的装饰器(Decorator)就是为此而生的“语法糖”,用@符号轻松实现功能扩展,让代码保持DRY(Don't Repeat Yourself)原则。
原理揭秘
装饰器本质是一个高阶函数:它接收一个函数作为参数,并返回一个新函数。通过闭包机制,新函数在调用原函数前后注入自定义逻辑。
def 悄悄计时(原函数):
def 新函数(*参数):
import time
起点 = time.time()
结果 = 原函数(*参数)
终点 = time.time()
print(f"{原函数.__name__}耗时{终点-起点:.4f}秒")
return 结果
return 新函数
@悄悄计时
def 慢动作():
time.sleep(1)
print("任务完成")
# 调用slow_task()
慢动作() # 输出:任务完成 | slow_task耗时1.0012秒
进阶玩法
- 带参数的装饰器:嵌套一层函数实现参数传递,如
@retry(次数=3) - 类装饰器:通过
__call__方法实现状态记录 - 内置工具:
functools.wraps保留原函数元信息
应用场景
- 日志记录 & 性能监控
- 权限校验(Web框架常用)
- 缓存结果(替代LRU缓存)
- 事务处理(如数据库操作)
结语
装饰器是Python高阶特性的缩影,它让代码像乐高积木一样灵活组合。下次遇到重复逻辑时,试试用@唤醒你的代码魔法!