一.理论
*装饰器实际上就是一个函数
*有两个特别之处
1.参数是一个函数
2.返回值是一个函数
二.示例
def my(func): #参数是一个函数
def w():
print("hello,world") #在装饰函数之前输出这句话
func() #装饰器修饰的函数的输出
return w #返回一个函数
@my
def run():
print("run")
run()
等价于 run=my(run)=w
三.两个注意的点
1.装饰器中定义的函数,要使用*args,**kwargs两队兄弟的组合.并且在这个函数中执行的时候也要把*args,**kwargs传进去.
2.需要使用functools.wraps在装饰器中的函数上把传进来的这个函数进行一个包裹,这样就不会丢失原来的函数的__name__等属性.
from functools import wraps
def my(func):
@wraps(func)
def w(*args,**kwargs):
print("hello,world")
func(*args,**kwargs)
return w