import time, functools #同时支持@log和@log('execute'), #实现原理:通过判断log的参数是否可被调用,从而执行不同调用 def log(arg = None): def metric(fn): @functools.wraps(fn) def tim(*args, **kw): print("begin call") start = time.time() ans = fn(*args, **kw) end = time.time() t = (end - start) * 100 if arg =='execute': print ("%s executed in %f ms" %(fn.__name__,t)) print("end call") return ans return tim #callable()为内置函数,可判断传入的参数是否可被调用(不仅限于函数),返回bool值 if callable(arg): return metric(arg) else: return metric @log def fast(x,y): time.sleep(0.0520) return x + y @log("execute") def slow(x, y, z): time.sleep(0.1314) return x * y * z f = fast(11,22) print (f) print("分割线========================") s = slow(11,22,33) print(s)
请问None和字符串都不callable,所以两种情况都是return的metric吗?但是直接写return metric就会报错,这是什么情况呢?
Sign in to make a reply
よろしく