我有几个功能需要评估使用timeit模块的性能。
对于初学者,我试图使用Timer对象来评估在随机整数列表上运行的顺序搜索函数,该函数应返回以秒为单位执行的时间。该函数返回值为False为-1(因为它永远不会找到-1),但它会给我以下错误。这是完整的输出:
False
Traceback (most recent call last):
File "D:/.../search-test.py", line 37, in <module>
main()
File "D:/.../search-test.py", line 33, in main
print(t1.timeit(number=100))
File "C:\...\Anaconda2\lib\timeit.py", line 202, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
TypeError: sequential_search() takes exactly 2 arguments (0 given)
这是我的计划:
from timeit import Timer
import random
def sequential_search(a_list, item):
pos = 0
found = False
while pos < len(a_list) and not found:
if a_list[pos] == item:
found = True
else:
pos = pos+1
return found
def num_gen(value):
myrandom = random.sample(xrange(0, value), value)
return myrandom
def main():
new_list = num_gen(100)
print(sequential_search(new_list, -1))
t1 = (Timer("sequential_search()", "from __main__ import sequential_search"))
print(t1.timeit(number=100))
if __name__ == '__main__':
main()
我是编程的菜鸟,老老实实地说我在挣扎。这个错误对我没有任何意义。我不明白为什么当它们已经在main()中传递时它会询问sequential_search函数参数。将参数插入Timer语句并不能解决问题。
请帮助我理解我搞砸了什么。谢谢!
答案 0 :(得分:1)
这是你制作计时器对象的方法 -
t1 = (Timer("sequential_search(new_list, -1)", setup="from __main__ import sequential_search, num_gen;new_list=num_gen(100);"))
print(t1.timeit(number=100))
输出 -
False
0.0014021396637
它不起作用只是因为你只是没有传递参数。所以只需初始化setup
中的变量(不一定),你就可以了。