带参装饰器
带参装饰器
import datetime,time
def copy_properties(src):
def _inner(dest):
dest.__name__ = src.__name__
dest.__doc__ = src.__doc__
return dest
return _inner
def logger(duration,func=lambda name, duration: print('{} took {}s'.format(name, duration))):
def _logger(fn):
@copy_properties(fn) # wrapper = copy_properties(fn)(wrapper) = _inner(wapper)
def wrapper(*args,**kwargs):
"""This is wrapper doc"""
start = datetime.datetime.now()
ret = fn(*args,**kwargs)
time.sleep(5)
delta = (datetime.datetime.now() - start).total_seconds()
if delta > duration:
func(fn.__name__, duration)
return ret
return wrapper
return _logger
@logger(5)
def add(x,y):
"""This is add doc"""
return x + y
print(add(4, 5))