在 Python 中使用定时器对象的错误输出

Error Output Using Timer Object in Python

我有几个函数需要用来评估使用 timeit 模块的性能。

首先,我尝试使用 Timer 对象来计算随机整数列表上的顺序搜索函数 运行,该函数的执行时间应该 return 以秒为单位。函数 returns 的 -1 值为 False(因为它永远不会找到 -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()

我是编程新手,老实说我很吃力。这个错误对我来说没有任何意义。我不明白为什么它要求 sequential_search 函数参数,而它们已经传入 main()。将参数插入 Timer 语句并不能解决问题。

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

这就是制作定时器对象的方法 -

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