Discuss / Python / 我的理解

我的理解

Topic source

@符后面为装饰器函数,将原函数传入装饰器函数返回代理函数,运行原函数实际是在运行代理函数

@log时,log为装饰器函数,将原函数func传入log得到代理函数wrapper,运行func实际是在运行wrapper

@log(text)时,log(text)的返回结果decorator为装饰器函数,将原函数func传入decorator得到代理函数wrapper,运行func实际是在运行wrapper

代理函数wrapper无论增加什么功能必须保证返回结果与原函数func返回结果一致

注:返回为return关键字

def metricf(fn):
    @functools.wraps(fn)
    def wrapper(*args, **kw):
        start = time.time()
        result = fn(*args, **kw)
        end = time.time()
        print('执行时长:', end - start)
        print('执行结果:', result)
        return result
    return wrapper

请教一下

start = time.time()
        result = fn(*args, **kw)
        end = time.time()

两个时间中间为什么有一个result = fn(*args, **kw)

这个fn(*args, **kw) 是什么用意呢?

为什么只在开始的时间time.time()后面加这个,end = time.time() 后面为什么不加呢?

这个位置加上fn(*args, **kw) 是为了调用所要测试执行时间的函数,把它放在start和end的中间,这样才能通过end-start计算出该函数的执行时间。


  • 1

Reply