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

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

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进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

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

进入课程

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

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