定义:在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),比如在函数执行前后打印日志
装饰器调用分析:
- 不带参数装饰器
def log(fun):
def wrapper(*args, **kwargs):
print('001', fun.__name__)
return fun(*args, **kwargs)
return wrapper
@log
def now():
print('002', now.__name__)
# 代码执行流程: now() -->log(now) -->wrapper(*args, **kwargs), 在wrapper函数中对函数进行处理,最后返回fun,这里当然也可以
# 返回其他函数,从代码执行结果可以看出,此时now变量已经重新指向了wrapper函数
now()
# 001 now
# 002 wrapper
2.带参数装饰器
def foo(*args, **kwargs):
print('004', args, kwargs)
def log(test):
def decorator(fun):
def wrapper(*args, **kwargs):
# a = fun() 处理函数
print('002', test, fun.__name__, args, **kwargs)
return foo(*args, **kwargs)
return wrapper
return decorator
@log('execute')
def now():
print('003', now.__name__)
# 代码执行顺序:log(now) -->decorator(now)(execute) -->wrapper(*args, **kwargs)(execute)
now()
# 002 execute now ()
# 004 () {}