装饰器嵌套
-
语法糖执行顺序
def fun_a(func): print("装饰器fun_a") def function(): res = func() return res return function def fun_b(func): print("装饰器fun_b") def function(): res = func() return res return function def fun_c(func): print("装饰器fun_c") def function(): res = func() return res return function @fun_a @fun_b @fun_c def fun(): print("执行fun函数") fun 执行结果 > 装饰器fun_c > 装饰器fun_b > 装饰器fun_a
可以看出,装饰器外层代码执行顺序从里到外的,等效于下列代码
fun=fun_a(fun_b(fun_c(fun)))`
- 内层调用逻辑顺序
装饰器内层代码的执行顺序就是从远及近
def fun_a(func):
def function():
print("执行装饰器fun_a内层方法")
res = func()
return res
return function
def fun_b(func):
def function():
print("执行装饰器fun_b内层方法")
res = func()
return res
return function
def fun_c(func):
def function():
print("执行装饰器fun_c内层方法")
res = func()
return res
return function
@fun_a
@fun_b
@fun_c
def fun():
print("执行fun函数")
fun()
运行结果:
> 执行装饰器fun_a内层方法
> 执行装饰器fun_b内层方法
> 执行装饰器fun_c内层方法
> 执行fun函数
网友评论