我需要将大量的UNIX时间戳舍入到它们各自的分钟(再次表示为时间戳).
出于纯粹的好奇心,我计时两种方法:
%timeit (127/60)*60
10000000 loops, best of 3: 76.2 ns per loop
%timeit 127 - 127%60
10000000 loops, best of 3: 34.1 ns per loop
Run Code Online (Sandbox Code Playgroud)
我跑了好几次,第二种方法的速度一直是第一种方法的两倍.为什么差异如此之大?
>>> import dis
>>> method1 = lambda: (127 / 60) * 60
>>> method2 = lambda: 127 - 127 % 60
>>> dis.dis(method1)
1 0 LOAD_CONST 1 (127)
3 LOAD_CONST 2 (60)
6 BINARY_DIVIDE
7 LOAD_CONST 2 (60)
10 BINARY_MULTIPLY
11 RETURN_VALUE
>>> dis.dis(method2)
1 0 LOAD_CONST 1 (127)
3 LOAD_CONST 3 (7)
6 BINARY_SUBTRACT
7 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,简单地优化模运算.