@修饰符

def funA(a):
    print("funA begin")
    def wrapper(*args,**kwargs):
        print("A warpper begin")
        a(*args,**kwargs)
        print("A warpper end")
    print("funA end")
    return wrapper

def funB(b):
    print("funB begin")
    def wrapper():
        print("B warpper begin")
        b()
        print("B warpper end")
    print("funB end")
    return wrapper

@funA
@funB
def funC():
    print("funC")

funC()

 代码结果如上图

@修饰符的作用,举例

@func1
def func2():

执行顺序如下:func1(func2)

只执行func1,不执行func2,func2作为参数传递给func1,如果func1中调用了func2,则func2会执行,如果没有调用则不会执行

上面代码的执行顺序是funA(funB(funC))

funA和funB是通过wrapper调用传入函数的,他们具体的执行步骤上图所示

先执行wrapper函数外的部分funA调用funB,所以先是funB begin,funB end,然后再是funA begin,funA end,然后再调用wrapper执行顺序a=>b=>c

原文地址:https://www.cnblogs.com/wangtianning1223/p/14118933.html