这一切都始于Raymond Hettinger的tweet,它涉及替代增量算子,又称 Space Invador算子
我想使用模块timeit来检查+=
和-=-
运算符的性能
Python 3
python3 -m timeit "for i in range(1000000): i+=1"
python3 -m timeit "for i in range(1000000): i-=-1"
输出:
10 loops, best of 5: 35.9 msec per loop
10 loops, best of 5: 36.6 msec per loop
Python 2
python -m timeit "for i in range(1000000): i+=1"
python -m timeit "for i in range(1000000): i-=-1"
输出:
10 loops, best of 5: 35.7 msec per loop
10 loops, best of 5: 36.7 msec per loop
请注意,在Python 2和Python 3中,+=
比-=-
快1msec
快i
,尽管两个操作的结果只是简单地增加了变量{{1} }按1。
请参见下面使用dis模块为这两个运算符生成的字节码指令。
>>> import dis
>>> def io(i): i+=1
>>> def aio(i): i-=-1
>>> dis.dis(io)
1 0 LOAD_FAST 0 (i)
2 LOAD_CONST 1 (1)
4 INPLACE_ADD
6 STORE_FAST 0 (i)
8 LOAD_CONST 0 (None)
10 RETURN_VALUE
>>> dis.dis(aio)
1 0 LOAD_FAST 0 (i)
2 LOAD_CONST 1 (-1)
4 INPLACE_SUBTRACT
6 STORE_FAST 0 (i)
8 LOAD_CONST 0 (None)
10 RETURN_VALUE
>>>
唯一的区别是INPLACE_ADD
和INPLACE_SUBTRACT
指令,其余指令几乎相同。