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计算出该函数的执行时间。

你好,可以问一下倒数第二个return不能直接return fn(*args, **kw)呢?而是要return results

恆星的心

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

直接return函数就退出了,后续就不能打印运行时间了。先用result接受return的结果,这时候函数已经运行完成了就可以计算运行时间,然后最后像原函数一样return退出。


  • 1

Reply