Python 装饰器
什么是装饰器?
装饰器是 Python 中一种**"化妆师",它能在不修改原函数代码的前提下,给函数动态添加新功能**。
- 本质:一个接收函数作为参数,并返回新函数的工具。
- 作用:像给手机贴膜,既保护屏幕(原函数),又新增防摔功能(装饰逻辑)。
核心原理
- 函数是"对象":Python 中函数可以像变量一样传递,这是装饰器的基础。
- 闭包机制:装饰器通过嵌套函数(闭包)保留原函数,并包裹新功能。
工作流程:
- 你调用被装饰的函数(如
hello())。 - Python 实际执行的是装饰器加工后的新函数。
- 新函数先执行装饰器添加的逻辑(如权限检查),再执行原函数。
常见用途
| 场景 | 作用 | 生活类比 |
|---|---|---|
| 权限验证 | 检查用户是否登录再执行函数 | 进小区前刷卡(装饰器是门禁系统) |
| 日志记录 | 自动记录函数调用时间和参数 | 飞机黑匣子(自动记录飞行数据) |
| 性能统计 | 计算函数运行耗时 | 跑步时用手表计时 |
| 缓存结果 | 避免重复计算(如 @lru_cache) | 备忘录(记下答案直接复用) |
两种实现方式
1. 函数式装饰器
最常用,通过嵌套函数实现。示例:给函数添加"呼叫提醒"功能。
def remind_call(func):
def wrapper():
print("【提醒】开始打电话...")
func() # 执行原打电话函数
print("【提醒】通话结束")
return wrapper
@remind_call
def call_friend():
print()
call_friend()

