在不改变函数代码的情况下,通过在函数前面加上装饰器可以让调用这个函数之前和之后做一些事情
装饰器其实就是一个函数,他的输入参数和返回值都是函数,就是把原函数加工一下,变成另一个函数,让他能做更多的事情
def dec_test(func):
def func1(*args,**kwargs):
print('test1')
func(*args,**kwargs)
print('test2')
return func1
@dec_test
def fff(a,b,c,d=4,e=5):
print(a+b+c)
print(d)
print(e)
print('yes')
fff(2,2,2,3)
#输出
#test1
#6
#3
#5
#yes
#test2
但是如果被装饰的函数有返回值怎么办?要把返回值记住然后在装饰器的最后返回
def dec_test(func):
def func1(*args,**kwargs):
print('test1')
t = func(*args,**kwargs)
print('test2')
return t
return func1
@dec_test
def fff(a,b,c,d=4,e=5):
print(a+b+c)
print(d)
print(e)
print('yes')
return(a+d+e)
p = fff(2,2,2,3)
print(p)