def outer(func): # 装饰器函数
def inner():
print("装饰器逻辑:执行前") # 装饰器的前置操作
func() # 调用原函数
print("装饰器逻辑:执行后") # 装饰器的后置操作
return inner # 返回内层函数
@outer # 语法糖:等价于 sleep = outer(sleep)
def sleep():
print("睡眠中……") # 原函数逻辑
# 调用被装饰后的sleep函数
sleep()
执行过程详解:
- 当运行
sleep()时,由于@outer的作用,此时的sleep已经被替换成了outer函数返回的inner函数。 - 所以调用
sleep()实际上就是调用inner()函数:- 先执行
print("装饰器逻辑:执行前") - 再执行
func()(这里的func就是原来的sleep函数),打印睡眠中…… - 最后执行
print("装饰器逻辑:执行后")
- 先执行
输出结果:
装饰器逻辑:执行前
睡眠中……
装饰器逻辑:执行后
这样就完整展示了从定义装饰器、装饰函数到最终调用的全过程,以及装饰器如何在原函数执行前后添加额外逻辑。
浙公网安备 33010602011771号