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

4

我最初编写了一个定时函数的自定义函数,如下所示:

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参数中完成这个任务:
"from __main__ import function"

但是我不知道该如何处理 *args,因为 'stmt' 和 'setup' 参数都是字符串,我怎么传递变量呢?


我认为你可以这样做 *(args + [arg1, arg2]) - Blender
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接