装饰器的执行顺序是怎样的?
@A
@B
@C
def f():
pass
装饰器函数的执行顺序分为定义阶段
和执行阶段
,装饰器函数在被装饰函数定义好后立即执行
-
在函数定义阶段:执行顺序是从靠近函数的装饰器开始,自内而外的执行
-
在函数执行阶段,执行顺序由外而内,一层层执行
举个例子:
def war1(func):
print("war1")
def inner(*args, **kwargs):
print("====war1 start====")
func(*args, **kwargs)
print("====war1 end====")
return inner
def war2(func):
print("war2")
def inner(*args, **kwargs):
print("====war2 start====")
func(*args, **kwargs)
print("====war2 end====")
return inner
@war1
@war2
def f():
print("****self****")
f()
网友评论