2012-02-05 70 views
4

我原来做了一个自定义函数用于计时,看起来像这样的功能:现在如何将* args传递给我的timeit.Timer对象?

def timefunc(function, *args): 
    start = time.time() 
    data = function(*args) 
    end = time.time() 
    time_taken = end - start 
    print "Function: "+function.__name__ 
    print "Time taken:",time_taken 
    return data 

,在了解timeit模块,我想使用来实现同样的事情。我只是无法弄清楚如何在发送函数和* args参数时执行此操作。我已经想通了,我必须这样做在设置ARG:

"from __main__ import function" 

但我想不出该怎么办*指定参数时,因为无论是“语句”和“设置”参数都是字符串,我怎样才能传递变量?

+0

我认为你可以做'*(参数+ [ARG1,ARG2])'。 – Blender 2012-02-05 05:21:20

回答

5

从Python 2.6开始,timeit模块除了字符串之外还接受可调用为stmt。考虑到这一点,你可以这样做:

import timeit 

def timefunc(function, *args): 
    def wrap(): 
     function(*args) 
    t = timeit.Timer(wrap) 
    return t.timeit(100) 

def test(arg): 
    foo = arg 

print(timefunc(test, 'bar'))