python中装饰器的执行顺序

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)
原文地址:https://www.cnblogs.com/kingchen/p/12961299.html