在Python

时间:2017-02-27 16:33:30

标签: python timer timeit

我有几个功能需要评估使用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语句并不能解决问题。

请帮助我理解我搞砸了什么。谢谢!

1 个答案:

答案 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中的变量(不一定),你就可以了。