个人理解:相当于类的接口,能添加新的功能,
并且会自动运行
功能:给函数添加新功能
无参模板:
def outer(func): #func是被装饰的函数
def inner(*args,**kwargs): #加参数的意义:被修饰的函数可能要求含参数,所以加入可变长参数
res=func(*args,**kwargs)
return res #保存被修饰函数的返回值,并且返回它
return inner #这里是返回的是里层函数inner的地址,不加括号,加括号返回的是inner的返回值
@outer
def func1():
print('这是func1')
func1()
多个装饰器叠加:
假如有装饰器outer1(),outer2(),outer3(),outer4()
@outer1
@outer2
@outer3
@outer4
def func2():
print('这是func2')
相当于outer1(outer2(outer3(outer4(func2))))
先运行outer1(),然后依次执行,最先结束的是func2()然后是outer4(),然后依次执行,
有参模板
def big_outer(*args,**kwargs):
def outer(func):
def inner(*args,**kwargs):
res=func(*args,**kwargs)
return res
return inner
return outer
@outer
def func1():
print('这是func1')
func1()