带参装饰器

带参装饰器

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

 

posted @ 2022-05-01 15:13  千焱  阅读(21)  评论(0编辑  收藏  举报