如何使用timeit模块

新手上路,请多包涵

我如何使用 timeit 来比较我自己的函数的性能,例如“ insertion_sort ”和“ tim_sort ”?

原文由 Neemaximo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 369
2 个回答

timeit 的工作方式是运行设置代码一次,然后重复调用一系列语句。所以,如果你想测试排序,需要小心一些,这样就地排序的一次传递不会影响已经排序数据的下一次传递(当然,这会让 Timsort 真正闪耀,因为它表现最好当数据已经部分排序时)。

以下是如何设置排序测试的示例:

 >>> import timeit

>>> setup = '''
import random

random.seed('slartibartfast')
s = [random.random() for i in range(1000)]
timsort = list.sort
'''

>>> print min(timeit.Timer('a=s[:]; timsort(a)', setup=setup).repeat(7, 1000))
0.334147930145

请注意,该系列语句在每次传递时都会生成未排序数据的新副本。

此外,请注意运行测量套件七次并仅保留最佳时间的计时技术——这确实有助于减少由于系统上运行的其他进程而导致的测量失真。

这些是我正确使用 timeit 的技巧。

原文由 Raymond Hettinger 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你想在交互式 Python 会话中使用 timeit ,有两个方便的选项:

  1. 使用 IPython 外壳。它具有方便的 %timeit 特殊功能:
    In [1]: def f(x):
      ...:     return x*x
      ...:

   In [2]: %timeit for x in range(100): f(x)
   100000 loops, best of 3: 20.3 us per loop

  1. 在标准的 Python 解释器中,您可以通过在设置语句中从 __main__ 导入它们来访问之前在交互式会话期间定义的函数和其他名称:
    >>> def f(x):
   ...     return x * x
   ...
   >>> import timeit
   >>> timeit.repeat("for x in range(100): f(x)", "from __main__ import f",
                     number=100000)
   [2.0640320777893066, 2.0876040458679199, 2.0520210266113281]

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题