装饰器(本质上是闭包)
多个装饰器一起使用时,由内到外执行顺序: 外层装饰器(内存装饰器(目标函数))
通用装饰器:
#定义python 通用装饰器
def decorator(func):
def inner(*args,**kwargs):
"""装饰内容"""
content = func(*args,**kwargs) #执行目标函数
"""装饰内容"""
return content #无返回值时为None
return inner
@decorator
def target(不定参数):
pass
#执行的target()函数其实是执行装饰器内的inner函数
target(不定参数)
带参数的装饰器:
def return_decorator(参数):
def decorator(func):
def inner(*args,**kwargs):
"""使用参数,装饰内容"""
content = func(*args,**kwargs) #执行目标函数
"""装饰内容"""
return content #无返回值时为None
return inner
return decorator
@return_decorator(参数)
def target(不定参数):
pass
#执行的target()函数其实是执行装饰器内的inner函数
target(不定参数)
类装饰器
class mydecorator(object):
def __init__(self,func):
self.__func = func
#实现__call__方法,让实例对象变成可调用的对象,可调用的对象可以像调用函数一样调用
def __call__(self,*args,**kwargs):
"""装饰内容"""
self.__func()
@mydecorator
def target():
pass
target()