Discuss / Python / 作业提交,修饰器还是不太会用

作业提交,修饰器还是不太会用

Topic source

郝仁E哥

#1 Created at ... [Delete] [Delete and Lock User]

第一题,问题不大 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()

毛毛虫鸣

#2 Created at ... [Delete] [Delete and Lock User]

可以!兄弟,你最后的那个判断语句比较的精髓。

郝仁E哥

#3 Created at ... [Delete] [Delete and Lock User]

哈哈,谢谢欣赏


  • 1

Reply