装饰器的主要功能和装饰器的固定结构
装饰器的主要功能:
在不改变函数调用方式的基础上在函数的前、后添加功能。
装饰器的固定格式:
def timer(func): def inner(): ''执行函数之前要做的''' re = func(*args,**kwargs) '''执行函数之后要做的''' return re return inner
#这个完全看不懂 from functools import wrapsdef deco(func): @wraps(func) #加在最内层函数正上方 def wrapper(*args,**kwargs): return func(*args,**kwargs) return wrapper
带参数的装饰器
假如你有成千上万个函数使用了一个装饰器,现在你想把这些装饰器都取消掉,你要怎么做?
一个一个的取消掉? 没日没夜忙活3天。。。
过两天你领导想通了,再让你加上。。。
#完全不搞不懂 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 innerdef wrapper2(func): def inner(): print('wrapper2 ,before func') func() print('wrapper2 ,after func') return inner@wrapper2@wrapper1def f(): print('in f')f()