第一题,问题不大 import time,functools def metric(fn): @functools.wraps(fn) def wrapper(args,**kw): begin=time.time() #初始时间 value=fn(args,**kw) #执行函数功能,value保存返回值 end =time.time() #结束时间 print('%s executed in %s ms' % (fn.name,end-begin)) return value return wrapper
测试 @metric def fast(x, y): time.sleep(0.0012) return x + y;
@metric def slow(x, y, z): time.sleep(0.1234) return x y z;
f = fast(11, 22) s = slow(11, 22, 33) if f != 33: print('测试失败!') elif s != 7986: print('测试失败!')
print('------------------分割线-----------------')
参考评论里的一位老哥的代码,主要是后面的判断返回 def log1(param): def decorator(func): @functools.wraps(func) def wrapper(args,**kw): print('begin call %s()..' % func.name) value = func(args,**kw) print('end call %s()..' % func.name) if value != None: return value return wrapper if isinstance(param,str): return decorator else: return decorator(param) 测试 @log1 def f1(): print('This is a not text call')
@log1('execute') def f2(): print('This is a have text call') f1() f2()
可以!兄弟,你最后的那个判断语句比较的精髓。
哈哈,谢谢欣赏
Sign in to make a reply
郝仁E哥
第一题,问题不大 import time,functools def metric(fn): @functools.wraps(fn) def wrapper(args,**kw): begin=time.time() #初始时间 value=fn(args,**kw) #执行函数功能,value保存返回值 end =time.time() #结束时间 print('%s executed in %s ms' % (fn.name,end-begin)) return value return wrapper
测试 @metric def fast(x, y): time.sleep(0.0012) return x + y;
@metric def slow(x, y, z): time.sleep(0.1234) return x y z;
f = fast(11, 22) s = slow(11, 22, 33) if f != 33: print('测试失败!') elif s != 7986: print('测试失败!')
print('------------------分割线-----------------')
参考评论里的一位老哥的代码,主要是后面的判断返回 def log1(param): def decorator(func): @functools.wraps(func) def wrapper(args,**kw): print('begin call %s()..' % func.name) value = func(args,**kw) print('end call %s()..' % func.name) if value != None: return value return wrapper if isinstance(param,str): return decorator else: return decorator(param) 测试 @log1 def f1(): print('This is a not text call')
@log1('execute') def f2(): print('This is a have text call') f1() f2()