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

求教为什么这个会报错啊!

import time
def performance(unit):
    t1=time.time()    
    def decorator(f):                
        def fn(*args, **kw):            
            r=f(*args,**kw)            
            t2=time.time()            
            print 'call %s() in %d %s' %f.__name__,t2-t1,unit            
            return r        
        return fn    
    return decorator  
          
    @performance('ms')
    def factorial(n):    
        return reduce(lambda x,y: x*y, range(1, n+1))
    print factorial(10)
Traceback (most recent call last):
  File "index.py", line 20, in 
    print factorial(10)
  File "index.py", line 10, in fn
    print 'call %s() in %d %s' %f.__name__,t2-t1,unit
TypeError: not enough arguments for format string

另外装饰器里为什么一定要插r=f(*args,**kw)这句?而且我不用无参数标识符,用r=f(n)这样的就不行么?

正在回答

2 回答

%(f.__name__,t2-t1,unit) 要加上括号 

f 跟 fn不是一个函数啊

2 回复 有任何疑惑可以回复我~
print 'call %s() in %d %s' %f.__name__,t2-t1,unit

最后一个百分号后面的三个参数需要用括号括起来

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

举报

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

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

进入课程

求教为什么这个会报错啊!

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号