import time, functools from types import FunctionType, MethodType def log(arg): flag = hasattr(arg, '__call__') or isinstance(arg, (FunctionType, MethodType)) def inner(func): functools.wraps(func) def wrapper(*args, **kw): start = time.time() print(f'方法<{func.__name__}>使用装饰器<log>') if flag else print(f'方法<{func.__name__}>使用装饰器<log("{arg}")>') ret = func(*args, **kw) print('----------------输入时间----------------') print(time.time() - start) print('----------------结束----------------') return ret return wrapper return inner(arg) if flag else inner @log def logN(arg): time.sleep(0.1024) print(arg) logN('装饰器log') @log('测试') def logP(arg): time.sleep(0.3018) print(arg) logP('装饰器log("测试")') # 执行结果: # 方法<logN>使用装饰器<log> # 装饰器log # ----------------输入时间---------------- # 0.10935568809509277 # ----------------结束---------------- # 方法<logP>使用装饰器<log("测试")> # 装饰器log("测试") # ----------------输入时间---------------- # 0.30973076820373535 # ----------------结束----------------
Sign in to make a reply
最帅的仔