什么事装饰器
运行时动态给函数增加功能,又不修改函数的方法,本质上,decorator就是一个返回函数的高阶函数
https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
@log
def now():
print('2015-3-25')
调用now()函数,不仅会运行now()函数本身,还会在运行now()函数前打印一行日志:
now()
call now():
2015-3-25
functools.wraps
使用装饰器可以极大的复用了代码,但它也有一个缺点就是原函数的元信息不见了,比如函数的docstring、name、参数列表等。
这时候我们可以使用functools.wraps库,wraps本身也是一个装饰器,它能够把原函数的元信息拷贝到装饰器函数中,这使用装饰器函数也有原函数一样的元信息了。