Generators 和 Timeit...我读错了结果吗?

Generators and Timeit... am I reading the results wrong?

我正在使用 Python 2.7.10.

我正在阅读有关生成器的教程,了解到 xrange 在调用时 returns 生成器,因此我希望它在计算总和时速度更快。

我对整个 1 个循环与 10 个循环感到困惑,考虑到只有 1 个循环,1 loop, best of 3 意味着什么?

timeit 如何知道要执行多少个循环,或者这是我应用 timeit 的代码的函数?

我不知道如何解释这里的结果....建议?

%timeit魔术命令给出的时间IPython就是语句所用的时间

xrange 的情况下,它只用了 68.2 毫秒,而 range 花了 243 毫秒,因此 xrange 确实比你期望的 range 快。

除非您仔细阅读文档,否则打印结果可能看起来有点奇怪。

timeit(或使用前者的%timeit)的基本操作是:

\-- repeat timer loop n times (return best of t_i / m)
  \-- timed run (time t_i is measured)
    \-- statement loop
          (unless specified, m = 1, 10, 100, ..., until t_i > 0.2s
            t_i = sum(t_s)
          )
      \-- statement (t_s, time per statement)

显示的是max(t_i).

  1. 第一个数字(n loops)是每个计时器的循环次数运行。
  2. 第二个数字(best of m)是定时器的数量运行秒。
  3. 第三个数字是 每个语句 执行 (2) 中最佳 运行 的时间。

默认情况下timeit 运行每个定时循环语句一次,运行三个定时循环。改变定时循环次数对应的开关是-r.

但是,如果定时器循环的 运行ning 时间小于 0.2 秒,它会在定时器循环内重复定时语句。首先它上升到 10 次,然后是 100 次,依此类推。这是第一个数字。固定这个数字对应的开关是-n.

所以 range() 运行 一次用于单个计时器循环,因为它花费了超过 0.2 秒。然而,单个 xrange() 总和花费的时间较少 0.2 秒,因此重复了 10 次,这足以将其推过边界(十 运行 花费了 0.682秒)。

生成的 运行ning 时间仍然是 single 语句的 运行ning 时间。其余的是典型的基准平滑的东西。