初学python,对装饰器的执行顺序,可能有很多人不太清晰。
下面我们先看一段装饰器的代码:
import time
def ceshi():
print("hello world")
def shuchu():
print("good bye")
def dss(func):
ceshi()
def wrapper(*args, **kwargs):
print("我是小坏蛋")
start_time = time.time()
func()
end_time = time.time()
print(str(end_time - start_time)+"5")
shuchu()
return wrapper
@dss #@dss的作用是 func=dss(func) 为func装饰返回
def func():
time.sleep(0.8)
func()# 函数调用
执行结果为:
可发现为先执行wrapper外部的函数,在执行wrapper内部的函数。
当一个函数有多个装饰器的时候:
import time
def ceshi():
print("hello world")
def shuchu():
print("good bye")
def dss(func):
ceshi()
def wrapper(*args, **kwargs):
print("我是小坏蛋")
start_time = time.time()
func()
end_time = time.time()
print(str(end_time - start_time)+"5")
shuchu()
return wrapper
def dsn(func):
shuchu()
print("521")
def mvc():
print("woshinidebaba")
start =time.time()
func()
end=time.time()
print(str(end-start)+"sf")
print("shaerzo")
return mvc
@dss
@dsn
def func():
time.sleep(0.8)
func()# 函数调用
在debug窗口下单步执行的结果如下:
由运行的结果可以得出:当一个函数有多个装饰器的时候,在被装饰函数的外部,会由近及远的进行,在装饰函数内部会顺序执行。当执行到func()原函数时。重新回到由近及远的执行。