为什么在某些情况下python中没有时间过去?

时间:2017-10-24 07:38:16

标签: python time elapsedtime

我运行以下python代码:

>>> time(),5==25/5,time()
(1508830844.2450676, True, 1508830844.2450676)
>>>

似乎时间没有过去,但使用明确的睡眠

>>> time(),sleep(1),time()
(1508830151.232, None, 1508830152.246)
>>>

或使用更长的任务

>>> time(),[xi for xi in range(1000000) if xi == 100000],time()
(1508830458.736, [100000], 1508830458.892)
>>>

按预期行事,时间已经过去。

现象是什么?什么时候我应该期待两次()邮票差异的积极结果? (使用python 2.7和3.5测试)

1 个答案:

答案 0 :(得分:2)

首先,您将所有表达式放在同一行上,并使用一个已经折叠的表达式;不在time()来电之间计算除法:

>>> import dis
>>> dis.dis(compile('time(),5==25/5,time()', '', 'single'))
  1           0 LOAD_NAME                0 (time)
              2 CALL_FUNCTION            0
              4 LOAD_CONST               0 (5)
              6 LOAD_CONST               3 (5.0)
              8 COMPARE_OP               2 (==)
             10 LOAD_NAME                0 (time)
             12 CALL_FUNCTION            0
             14 BUILD_TUPLE              3
             16 PRINT_EXPR
             18 LOAD_CONST               2 (None)
             20 RETURN_VALUE

那些LOAD_CONST来电和COMPARE_OP几乎没有任何时间。

接下来,time()时钟可能没有足够的分辨率来捕获这三个操作码之间的短时间。来自time.time() documentation

  

请注意,即使时间始终作为浮点数返回,但并非所有系统都提供的精度高于1秒。

选择higher-resolution clock。或者您可以使用timeit.default_timer() callable,它应该设置为您平台的最高分辨率计时器:

>>> from timeit import default_timer
>>> default_timer(), 5==25/5, default_timer()
(352821.948302353, True, 352821.948304896)

如果你想在Python代码片段上运行时间试验,比较它们的性能,那么你应该使用timeit module