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

代码中的 f 指的是在什么?参数‘ms’的传递路径又是怎样的呢?求大神解答?​

代码中的 f 指的是在什么?参数‘ms’的传递路径又是怎样的呢?求大神解答?

import time

def performance(unit):

    def log_time(f):

        def a(*args,**kw):

            t1=time.time()

            r=f(*args,**kw)

            t2=time.time()

            if unit == 's':

                t=t2-t1;

            elif unit == 'ms':

                t=(t2-t1)*1000;

            else:

                print 'input error'

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

            return r

        return a

    return log_time

            


@performance('ms')

def factorial(n):

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


print factorial(10)


正在回答

2 回答

f指的就是被装饰器装饰的函数,就是你那段代码里的factorial()函数,factorial()函数被performance这个装饰器装饰了

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

'ms'传给performance后存储在函数performance的作用域中,f传给log_time后存储在log_time作用域中,而a隶属于以上两个函数的作用域。

在调用performance('ms')后返回了一个unit参数为'ms'的log_time装饰器,相当于@log_time,然后传入factorial函数作为log_time装饰器的参数,返回的函数a即为f参数为factorial,unit参数为'ms'的包装后的factorial函数,然后再对factorial函数进行调用,则为带着unit='ms'和f=factorial进行调用。

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

举报

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

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

进入课程

代码中的 f 指的是在什么?参数‘ms’的传递路径又是怎样的呢?求大神解答?​

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