想实现用装饰器来计时,空白处应填的代码是?

# -*- coding: utf-8 -*-
import time, functools
def metric(fn):
    # 空白处
    def wrapper(*args, **kw):
        startTime = time.time()
        tmp = fn(*args, **kw)
        endTime = time.time()
        print('%s executed in %s s' % (fn.__name__, endTime - startTime ))
        return tmp
    return wrapper

为何填写的是@funtools.wraps(fn)?

阅读 2.5k
2 个回答
需要把原始函数的__name__等属性复制到wrapper()函数中,否则,有些依赖函数签名的代码执行就会出错。

我再解释下joy钰的答案,用这个装饰器修饰函数,print func.__name__是wrapper,函数的名字被改了,但是如果加了@functools.wraps(fn)这个装饰器,print func.__name__还是函数本来的名字

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题