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__)