用简洁的易懂的语言解析python装饰器的执行流程
Python装饰器的执行流程(三步走)
1. 定义阶段:函数头上贴标签
当你写 @装饰器
时,相当于告诉 Python:“把这个函数包装一下”。
示例代码:
def 装饰器(原函数): # 装饰器函数(负责包装)
def 新函数(): # 新函数会替代原函数
print("装饰器:开始")
原函数() # 调用原函数
print("装饰器:结束")
return 新函数 # 返回包装后的新函数
@装饰器 # 相当于:我的函数 = 装饰器(我的函数)
def 我的函数():
print("原函数执行")
2. 执行阶段:装饰器立刻生效
装饰器在代码加载时立即执行(比如导入模块或运行脚本时),而不是等到调用函数!
执行流程:
- 调用装饰器函数:Python 会把
我的函数
作为参数传给装饰器
。 - 生成新函数:装饰器返回
新函数
,替换原来的我的函数
。
此时,我的函数
已经变成了新函数
。
3. 调用阶段:实际执行的是包装后的函数
当你调用 我的函数()
时,实际执行的是 新函数
。
输出结果:
装饰器:开始
原函数执行
装饰器:结束
一句话总结流程
“先包装,再替换”
- 定义时:
@装饰器
触发装饰器函数执行,生成新函数。 - 调用时:执行的是被装饰器包裹后的新函数。
类比理解:礼物的包装
- 原函数:礼物本身
- 装饰器:包装盒和彩带(在礼物外面加一层包装)
- 调用函数:拆开包装盒,最终拿到礼物(原函数逻辑)