我运行以下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测试)
答案 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。