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

4 投票
1 回答
1009 浏览
提问于 2025-04-17 12:21

我最开始写了一个自定义的函数来计时,代码大概是这样的:

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'这两个参数都是字符串,我该怎么传递这些变量呢?

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

撰写回答