装饰器
装饰器的主要功能:在不改变函数调用方式的基础上在函数的前、后添加功能。
装饰器的固定格式:
def timer(func): def inner(*args,**kwargs): ‘‘‘执行函数之前要做的‘‘‘ re = func(*args,**kwargs) ‘‘‘执行函数之后要做的‘‘‘ return re return inner
#装饰的固定格式和运用 import time def timmer(func): def inner(*args,**kwargs): start = time.time() ret =func(*args,**kwargs) end=time.time()-start print(end) return ret return inner @timmer def ceshi(): time.sleep(0.2) print(‘测试成功‘) ceshi() @timmer def ceshi2(): time.sleep(0.3) print(‘测试成功‘) ceshi2() #假如你有成千上万个函数使用了一个装饰器,现在你想把这些装饰器都取消掉,你要怎么做? # 一个一个的取消掉? 没日没夜忙活3天。。。 # 过两天你领导想通了,再让你加上。。。 import time FLAG=False #只需要改变FLAG的变量 def outer(flag): def timmer(func): def inner(*args,**kwargs): if flag: start = time.time() ret =func(*args,**kwargs) end=time.time()-start print(end) return ret else: ret =func(*args,**kwargs) return ret return inner return timmer @outer(FLAG) def ceshi(): time.sleep(0.2) print(‘测试成功‘) ceshi() @outer(FLAG) def ceshi2(): time.sleep(0.3) print(‘测试成功‘) ceshi2()
带参数的装饰器
def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print(‘‘‘执行函数之前要做的‘‘‘) re = func(*args,**kwargs) if flag: print(‘‘‘执行函数之后要做的‘‘‘) return re return inner return timer @outer(False) def func(): print(111) func()
多个装饰器装饰同一个函数
def wrapper1(func): def inner(): print(‘wrapper1 ,before func‘) func() print(‘wrapper1 ,after func‘) return inner def wrapper2(func): def inner(): print(‘wrapper2 ,before func‘) func() print(‘wrapper2 ,after func‘) return inner @wrapper2 @wrapper1 def f(): print(‘in f‘) f()
原文:https://www.cnblogs.com/yzcstart/p/10580844.html