为了账号安全,请及时绑定邮箱和手机立即绑定

代码不知道哪里错了~帮忙解答

import time


def performance(unit):

    def performance_decorator(f):

        def wrapper(*arg, **kw):

            t1 = time.time()

            r = f(*args, **kw)

            t2 = time.time()

            if unit == 'ms':

                t = (t2 - t1) * 1000

            else:

                t = (t2 - t1)

            print('call %s() in %f %s' % (f.__name__, t, unit))

            return r

        return wrapper

    return performance_dacorator


@performance('ms')

def factorial(n):

    return reduce(lambda x,y: x*y, range(1, n+1))


print(factorial(10))


正在回答

2 回答

return performance_dacorator  这里,上面是performance_decorator 拼写错误,再有错就是print不加括号,2.x和3.x的版本问题

0 回复 有任何疑惑可以回复我~
#1

慕斯9498634

眼神真是好
2017-02-22 回复 有任何疑惑可以回复我~

第一、代码中 def wrapper(*arg, **kw):与代码r = f(*args, **kw),参数不一致。

第二、缺少functools模块、应在import加上functools。import time改为import time,functools。

            为什么加:原函数f经过装饰器装修后,属性(函数名,参数名)发生了变化,会导致依赖函数名的代码失效

第三、 def performance_decorator(f):函数后面加上@functools.wraps(f)。可以通过functools模块中的wraps函数将原函数f的一些属性复制到新函数中。

第四、代码return performance_dacorator,返回的performance_dacorator与performance_decorator不一致。仔细看'dacorator'、'decorator'。


1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

代码不知道哪里错了~帮忙解答

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信