Python之装饰器-带参装饰器
带参装饰器
- @之后不是一个单独的标识符,是一个函数调用
- 函数调用的返回值又是一个函数,此函数是一个无参装饰器
- 带参装饰器,可以有任意个参数
- @func()
- @func(1)
- @func(1, 2)
def add(x, y):"""函数说明:参数说明返回值说明"""pass
add.__name__, add.__doc__
help(add)
import datetime start = datetime.datetime.now()
end = datetime.datetime.now()
def logger(wrapped):def wrapper(*args, **kwargs):"wrapper +++"start = datetime.datetime.now()ret = wrapped(*args, **kwargs)delta = (datetime.datetime.now() - start).total_seconds()print("{} tooks {}s.".format(wrapped.__name__, delta))return retwrapper.__name__ = wrapped.__name__ wrapper.__doc__ = wrapped.__doc__return wrapper@logger
def add(x, y): "add description~~"return x + yprint(add(4, 5))
print(add.__name__, add.__doc__)
from functools import update_wrapper, wraps def logger(wrapped):@wraps(wrapped) def wrapper(*args, **kwargs):"wrapper +++"start = datetime.datetime.now()ret = wrapped(*args, **kwargs)delta = (datetime.datetime.now() - start).total_seconds()print("{} tooks {}s.".format(wrapped.__name__, delta))return retreturn wrapper@logger
def add(x, y): "add description~~"return x + yprint(add(4, 5))
print(add.__name__, add.__doc__)
from functools import update_wrapper, wrapsdef logger(wrapped):@wraps(wrapped) def wrapper(*args, **kwargs):"wrapper +++"start = datetime.datetime.now()ret = wrapped(*args, **kwargs)delta = (datetime.datetime.now() - start).total_seconds()print("{} tooks {}s.".format(wrapped.__name__, delta))return retreturn wrapper@logger
def add(x, y): return x + y@logger
def sub(x, y):return x - y
print(add.__name__, sub.__name__)