如何将*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参数传进去。我已经明白了在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'))