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