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

来人看看代码那里有错误啊!

import time
def performance(f):
    def fn(*args, **kw):
        t1 = time.time()
        r = f(*args, **kw)
        t2 = time.time()
        print 'call %s() in %fs' % (f.__name__, (t2 - t1))
        return r
    return fn

@performance
def factorial(n):
    return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)


正在回答

4 回答

你上面的代码并没有问题,可能是慕课网的IDE的问题吧,慕课网的webIDE好像是判定好了输入,如果有点改动就会报错,我用上面的代码跑了一下,是完全正确的。

http://img1.sycdn.imooc.com//58cb56c30001ddbb09720475.jpg

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

qq_在的_03499974 提问者

非常感谢!
2017-03-21 回复 有任何疑惑可以回复我~

我看了一下你上面的代码和那一节的答案是一样的,按理说应该没什么问题才对,这我就不懂了,sorry,帮不到你,你找其他大佬吧

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

我跟答案自己写了一遍,不知道那里有错,下面是原答案

import time, functools
def performance(unit):
   def perf_decorator(f):
       @functools.wraps(f)
       def wrapper(*args, **kw):
           t1 = time.time()
           r = f(*args, **kw)
           t2 = time.time()
           t = (t2 - t1) * 1000 if unit=='ms' else (t2 - t1)
           print 'call %s() in %f %s' % (f.__name__, t, unit)
           return r
       return wrapper
   return perf_decorator

@performance('ms')
def factorial(n):
   return reduce(lambda x,y: x*y, range(1, n+1))
print factorial.__name__


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

把return r 改为 return f ,试一试 你  return r  不知道 下一步进行什么,但其实下一步是进行factorial(n)(没被修饰的)这个函数

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

举报

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

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

进入课程

来人看看代码那里有错误啊!

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