Discuss / Python / 2022/10/11

2022/10/11

Topic source

作业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()

  • 1

Reply