import time
def outter(func):
print(1)
def wrapper(*args, **kwargs):
print(2)
start = time.time()
time.sleep(3)
func(*args, **kwargs)
stop = time.time()
print(stop - start)
print(3)
return wrapper
@outter
def index(x, y):
print(4)
print('index->%s %s' % (x, y))
# 執行順序為:python解釋器啟動執行裝飾器@outter這一行
# 當碰到@函數名時,會調用@后面的函數並且把下面的函數作為參數穿進去
# 如:outter(index),並執行這個函數,會返回wrapper,就是wrapper的內存地址
# 所有函數index就變成了wrapper(wrapper偽裝成了index),下面是正式調用index
# 因為index已經變成了wrapper,所以會直接調用wrapper
# 並且執行完會返回到函數調用處,接着往下執行
index(1, 2)