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

哪位高手给解释下,

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)) #'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)

raw_input()


正在回答

3 回答

%s()  括号起什么作用,用和不用的结果是一样的

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

%号用来格式化字符串,%s表示字符串的替换,%fs表示浮点小数的替换

 有几个%?,后面就有几个变量或值,顺序对应好


print ' call %s(表示在输出结果时这个位置需要插入一个字符串,用%s占个位置) () in  %fs(表示在输出结果时这个位置需要插入一个浮点小数,用%fs占个位置) ' %(表示格式化后面的字符串)(f.__name__,(t2-t1)) (f.__name__对应前面的%s,(t2-t1)对应前面的%fs)

call %s() in %fs'%(f.__name__,(t2-t1))  可以想象成   call f.__name__() in (t2-t1)

但是由于输出结果是根据变量在变化的,所以需要格式化字符串,写成答案上的形式

大概是这样,希望我有表达清楚~

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

小钱趣

纠正一下:%f表示浮点小数的替换,后面那个s表示秒,前面打错了
2016-04-20 回复 有任何疑惑可以回复我~
#2

sulyeonW 回复 小钱趣

请问为什么‘由于输出结果是根据变量在变化的,所以需要格式化字符串’呢?最后一个%是什么时候都要加上的么?
2017-03-09 回复 有任何疑惑可以回复我~

你换个写法,就好理解了:

if unit == 'ms':
    t = (t2 - t1) * 1000
else:
    t = t2 - t1
print 'call %s() in %f %s' % (f.__name__, t, unit)


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

咚balala

呃,看错了,不好意思
2016-04-18 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

哪位高手给解释下,

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