Wie der Titel schon sagt. Es ist zunächst kein schwerer Prozess, daher denke ich nicht, dass es einem langsamen Programm passieren wird, wenn ich das weiß, aber es war überraschend, also als kleine Geschichte.
Code
from __future__ import print_function
import timeit
print("i+=1\t", timeit.timeit("while i<1000000: i+=1", setup="i=0"))
print("i=i+1\t", timeit.timeit("while i<1000000: i=i+1", setup="i=0"))
print("a[0]+=1\t", timeit.timeit("while a[0]<1000000: a[0]+=1", setup="a=[0]"))
print("a[0]=a[0]+1\t", timeit.timeit("while a[0]<1000000: a[0]=a[0]+1", setup="a=[0]"))
text:Python2.7.8 Ausführungsergebnis
i+=1 0.0610518455505
i=i+1 0.0599188804626
a[0]+=1 0.108623981476
a[0]=a[0]+1 0.108937978745
text:Python3.4.1 Ausführungsergebnis
i+=1 0.08549419100017985
i=i+1 0.07950809699832462
a[0]+=1 0.14678418899711687
a[0]=a[0]+1 0.1382706459990004
Python3 ist langsamer. Ich wusste es nicht. Wie auch immer. Es stellt sich heraus, dass "i = i + 1" schneller ist als "i + = 1", wenn auch nur geringfügig.
Ich habe es nicht im Detail untersucht, aber die Ursache ist wahrscheinlich die folgende. Wenn Sie Zuweisungen in der Form "i + = 1" hinzufügen, versucht der Python-Interpreter zuerst, "i .__ iadd__" zu finden. Und wenn es nicht existiert, suchen Sie nach "i .__ add__". Für Ergänzungen der Form "i = i + 1" sucht der Python-Interpreter von Anfang an nach "i .__ add__". Weder Python2 noch Python3 haben also "int .__ iadd__". Daher ist die Verarbeitung von "i + = 1" verschwenderisch, da sie durch die Suche nach "int .__ iadd__" fehlschlägt. Daher ist das Format "i = i + 1" wahrscheinlich schneller.
Ich dachte jedoch, dass "a [0] + = 1" schneller wäre als "a [0] = a [0] + 1", was zwei Array-Referenzen erfordert. Wenn Sie sorgfältig darüber nachdenken, scheint es schneller zu sein, auf die 0. des Arrays zu verweisen, als nach einer Methode zu suchen.