python:benchmark:operators

**Ceci est une ancienne révision du document !** ----

A PCRE internal error occured. This might be caused by a faulty plugin

====== Opérateurs ====== ===== Division et multiplication ===== Il est bien connu que les multiplications sont plus rapides à calculer que les divisions, on est donc facilement tenté de convertir ses diviseurs en multiplicateurs. Vérifions. <Code> python -m timeit -n 1000000 -r 10 -s "i=.83" "i * .25" 1000000 loops, best of 10: 0.0805 usec per loop python -m timeit -n 1000000 -r 10 -s "i=.83" "i / 4.0" 1000000 loops, best of 10: 0.0329 usec per loop </Code> <gchart 270x130 hbar center "% vs /"> division = 8.05 multiplication = 3.29 </gchart> La multiplication est bien environ deux fois plus rapide que la division. <WRAP center tip> Aux rares occasions où le compilateur est capable de déterminer le résultat, l'opération sera précalculée. </WRAP> ====Incrémentation et addition==== <Code> python -m timeit -n 1000000 -r 10 -s "i=0" "i = i+1" 1000000 loops, best of 10: 0.0958 usec per loop python -m timeit -n 1000000 -r 10 -s "i=0" "i += 1" 1000000 loops, best of 10: 0.0958 usec per loop </Code> <gchart 270x130 hbar center "Addition"> addition = 1 incrémentation = 1 </gchart> Incrémentation et addition sont tout aussi rapides. Il s'agit intrinsèquement de la même opération, seulement une différence de syntaxe. Le compilateur produit le même //bytecode// pour les deux : <Code python> import dis def add(i): i = i + 1 def inc(i): i += 1 dis.dis(add) 2 0 LOAD_FAST 0 (i) 3 LOAD_CONST 1 (1) 6 BINARY_ADD 7 STORE_FAST 0 (i) 10 LOAD_CONST 0 (None) 13 RETURN_VALUE dis.dis(inc) 2 0 LOAD_FAST 0 (i) 3 LOAD_CONST 1 (1) 6 INPLACE_ADD 7 STORE_FAST 0 (i) 10 LOAD_CONST 0 (None) 13 RETURN_VALUE </Code>