作业1
import time,functoolsdef metric(fn): @functools.wraps(fn) def wrapper(*args,**kw): start_time=time.time() res=fn(*args,**kw) print('%s executed in %s ms' % (fn.__name__, time.time()-start_time )) return res return wrapper# 测试@metricdef fast(x, y): time.sleep(0.0012) return x + y;@metricdef slow(x, y, z): time.sleep(0.1234) return x * y * z;f = fast(11, 22)s = slow(11, 22, 33)print(fast.__name__,slow.__name__)#验证functools.wrap(func)的作用if f != 33: print('测试失败!')elif s != 7986: print('测试失败!')
作业2
思路:inner(即教程中的wrapper里面的参数用*args **kw代替便是因为不知道func函数是否有参数,args用来接收实参,kw用来接收变参。作业2便是不知道log是否有text 是个实参 所以加上*argstext来承载可能传入的text)
def log(*argstext): def outer(func): @functools.wraps(func) def inner(*args,**kw): if len(argstext)!=0: for n in argstext: print(n,end="") print("\n%s"%func.__name__) else: print("%s"%func.__name__) print("begin call") res=func(*args,**kw) print("end call") return res return inner return outer@log()def f(): passf()@log('execuate')def h(): passh()
Sign in to make a reply
★&Lucky☆繁星
作业1
作业2
思路:inner(即教程中的wrapper里面的参数用*args **kw代替便是因为不知道func函数是否有参数,args用来接收实参,kw用来接收变参。作业2便是不知道log是否有text 是个实参 所以加上*argstext来承载可能传入的text)