带参数的装饰器
最多迭代三层函数
多个装饰器装饰同一个函数
先使用最近的装饰器
先使用@wrapper1,再使用@wrapper2
def wrapper1(func): def inner(): print('wrapper1 ,before func') func() print('wrapper1 ,after func') return innerdef wrapper2(func): def inner(): print('wrapper2 ,before func') func() print('wrapper2 ,after func') return inner@wrapper2@wrapper1def f(): print('in f')f()
wrapper2 ,before func
wrapper1 ,before funcin fwrapper1 ,after funcwrapper2 ,after func