1
function_to_test(test, mylist): #test as an int, mylist as a list of int
     do_something    
     return something

function_generates_a_list(min, max): #min, max are int
     do_something
     return a_List

我需要对 function_to_test 进行计时,并且只有这个。目的是测试代码以确定哪一个最适合测试 int 是否在 int 列表中。(test是一个 googolplex,mylist是一个从 min 到 max 的巨大列表)。是的,我已经知道函数的结果,我需要知道它会花费多少次。

我的问题是:如果我想将全局列表作为我测试的函数的本地参数传递,我应该使用哪种语法与 timeit 一起使用?

4

1 回答 1

1

最简单的方法是创建一个不带参数的函数,并使用它需要的任何参数调用您的函数:

mylist = function_generates_a_list()
def newfunc():
   function_to_test(mylist)

然后您可以调用timeit(newfunc). 您也可以使用 lambda 表达式来执行此操作 -timeit(lambda: function_to_test(mylist))与上述完全等价。如果您正在使用timeit模块方式(即做python -m timeit ...),您也可以这样做:

python -m timeit --setup='import mymodule' 'mymodule.newfunc()'

newfunc您可以通过使用足够复杂的字符串来完全避免使用setup(调用function_generates_a_list必须在设置中,可能(如这里)但不一定通过在导入模块时发生,如果您不希望它成为您的时间的一部分),但是拥有该功能会使事情变得更加灵活且不那么烦人。

于 2012-06-20T14:14:22.863 回答