如何将* args传递给我的timeit.Timer对象?

时间:2012-02-05 05:17:19

标签: python function args timeit

我最初为定时函数制作了一个自定义函数,如下所示:

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参数时,我无法弄清楚如何做到这一点。我已经发现我必须在setup arg中执行此操作:

"from __main__ import function"

但我无法弄清楚如何处理* args,因为'stmt'和'setup'参数都是字符串,我如何传递变量?

1 个答案:

答案 0 :(得分:6)

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