#不带参数的装饰器timer1
def timer1(func): def inner(): print('执行函数前要做的') func() print('执行函数后要做的') return inner @timer1 #func1 =timer(func2) def func1(): print('我是函数func') func1()
输出:
执行函数前要做的
我是函数func
执行函数后要做的
#带参数的装饰器timer2
def timer2(func): def inner(args): print('执行函数前要做的') func(args) print('执行函数后要做的') return inner @timer2 def func2(name): print('hi,%s'%name) func2('kobe')
输出:
执行函数前要做的
我是函数func
执行函数后要做的
# 带多个参数的装饰器timer3
def timer3(func): def inner(*args,**kwargs): print('执行函数前要做的') func(*args,**kwargs) print('执行函数后要做的') return inner @timer3 def func3(name1,name2): print(name1+' VS '+name2) func3('kobe','james')
输出:
执行结果:
执行函数前要做的
kobe VS james
执行函数后要做的
#待返回值的装饰器timer4
def timer4(func): def inner(*args, **kwargs): print('执行函数前要做的') re = func(*args, **kwargs) #把func的返回值存到re print('执行函数后要做的') return re #返回re return inner @timer4 def func4(a): print('a') return 'func4 is over' func4('a') print(func4('aaaaaa')) #打印func4的返回值
输出:
执行函数前要做的 a 执行函数后要做的 func4 is over
#带开关的装饰器outer
def outer(flag): def timer5(func): def inner(*args,**kwargs): if flag: print('当F为True时执行我') re = func(*args,**kwargs) print('True 执行完') return re return inner return timer5 @outer(True) #当outer中的参数为true时,装饰器不运行,False时,装饰器不运行,类似于开关 def func5(): print('我是测试带开关的装饰起的func5') return 'func5func5' @outer(True) def func6(): print('周一不运行') func5() print(func5())
输出:
当F为True时执行我
我是测试带开关的装饰起的func5
True 执行完
当F为True时执行我
我是测试带开关的装饰起的func5
True 执行完
func5func5