立即学习:https://edu.csdn.net/course/play/27211/379059?utm_source=blogtoedu
装饰器是一种函数,可以让被装饰的函数在不修改任何代码的情况下添加额外的功能,装饰器的本质是调用函数
#普通装饰器
def log(func):
#*args与**kwargs表示可以接收任何参数,定义一个函数,名称任意
def wrapper(*args,**kwargs):
#添加日志
print('this is a log')
#执行被装饰函数
return func(*args,**kwargs)
return wrapper #返回装饰后函数地址
#使用装饰器
@log
def func():
print('I am a function')
#调用func函数时自动加上log装饰器
func()
#等价于
log(func)()
#带参数装饰器
def log(level):
def decorator(func):
def wrapper(*args,**kwargs):
if level == 'info':
print('I am info level log')
elif level == 'error':
print('I am error level log')
return wrapper
return decorator
@log(level='info')
def func1():
print('I am a function1')
@log(level='error')
def func2():
print('I am a function2')
func1()
func2()
#类装饰器使用__call__方法
class Log(object):
def __init__(self,func):
self.func = func
def __call__(self):
print('I am log')
self.func()
@Log
def func():
print('I am a function')
func()