[Petite histoire] En Python, i = i + 1 est légèrement plus rapide que i + = 1.

Comme le dit le titre. Ce n'est pas un processus lourd au départ, donc je ne pense pas que ça va arriver à un programme lent quand je le sais, mais c'était surprenant, donc comme une petite histoire.

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 Résultat de l'exécution


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 résultat d'exécution


i+=1     0.08549419100017985
i=i+1    0.07950809699832462
a[0]+=1  0.14678418899711687
a[0]=a[0]+1      0.1382706459990004

Python3 est plus lent. Je ne savais pas. En tous cas. On peut voir que ʻi = i + 1 est plus rapide que ʻi + = 1, bien que très légèrement.

Je ne l'ai pas étudié en détail, mais la cause est probablement la suivante. Lorsque vous ajoutez des affectations sous la forme «i + = 1», l'interpréteur Python essaie d'abord de trouver «i .__ iadd__». Et s'il n'existe pas, cherchez ʻi .__ add__. Pour les ajouts de la forme ʻi = i + 1, l'interpréteur Python recherche ʻi .__ add__ depuis le début. Ainsi, ni Python2 ni Python3 n'ont ʻint .__ iadd__. Par conséquent, il y a un gaspillage dans le traitement de ʻi + = 1 car il échoue en recherchant ʻint .__ iadd__. Par conséquent, le format «i = i + 1» est probablement plus rapide.

Cependant, je pensais que ʻa [0] + = 1 serait plus rapide que ʻa [0] = a [0] + 1, ce qui nécessite deux références de tableau. Si vous y réfléchissez bien, il semble qu'il soit plus rapide de se référer au 0ème du tableau que de rechercher une méthode.

Recommended Posts

[Petite histoire] En Python, i = i + 1 est légèrement plus rapide que i + = 1.
@ Est plus rapide que dot
petite histoire de python
J'ai écrit python en japonais
Le cycle de publication de Python est plus rapide!
Je comprends Python en japonais!
Ce que j'ai appris en Python
[Petite histoire] [Python] Remplacez les chaînes de caractères dans un tableau à deux dimensions par des nombres
Différence entre == et est en python
Utilisez le tissu tel quel en python (fabric3)
Golang vs Python - Golang est-il meilleur que Python?
Python est UnicodeEncodeError dans le menu fixe CodeBox
[Memo for Python competition professional] Le cache LRU est plus rapide que la conversion de mémo dans le programme
sympy.Mul est beaucoup plus rapide que sympy.prod
J'ai écrit Fizz Buzz en Python
[Petite histoire] Obtenez l'horodatage avec Python
Il n'y a pas de commutateur en python
J'ai essayé d'étudier le processus avec Python
Scikit-learn ne peut pas être installé en Python
J'ai écrit la file d'attente en Python
Python in est aussi un opérateur
J'ai essayé la notification de ligne en Python
J'ai écrit la pile en Python
Dans Python 3.8, pow (n, -1, 1000000007) est meilleur que pow (n, 1000000007 --2, 1000000007)
J'ai mis Python 2.7 dans Sakura VPS 1 Go.
J'ai essayé d'implémenter PLSA en Python
J'ai fait un programme de gestion de la paie en Python!
Inject est recommandé pour DDD en Python
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'utiliser l'optimisation bayésienne de Python
Je ne peux pas déboguer les scripts python dans Eclipse
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Hash en Perl est un dictionnaire en Python
J'ai essayé d'implémenter la régression logistique de Cousera en Python
J'ai essayé d'implémenter ADALINE en Python
Je voulais résoudre ABC159 avec Python
J'ai essayé d'implémenter PPO en Python
ModuleNotFoundError en Python: aucun module nommé story
J'ai cherché un nombre premier avec python
Conseils pour créer de petits outils avec python
Qu'est-ce qui est le plus rapide, le mélange Python ou l'échantillon?
J'ai créé un outil de mot de passe en Python.
Comment utiliser is et == en Python
Pourquoi ne puis-je pas installer matplotlib avec python! !!
Je suis allé à "L'été bat son plein! Spark + Python + Data Science Festival".
Le programme Python est lent! Je veux accélérer! Dans ce cas ...
Je veux faire le test de Dunnett en Python
J'ai essayé d'implémenter le filtre anti-spam bayésien de Robinson avec python
Un mémo que j'ai écrit un tri rapide en Python
Python: j'ai pu récurer en lambda
Je veux créer une fenêtre avec Python
Qu'est-ce que wheezy dans l'image Docker Python?
J'ai essayé de jouer à un jeu de frappe avec Python
Quand j'essaye matplotlib en Python, il dit 'cairo.Context'
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
J'ai étudié en détail le traitement des variables en python
J'ai essayé Python! ] Diplômé aujourd'hui de "Tout le monde Python! Qu'est-ce que Python!"!
J'ai écrit une classe en Python3 et Java
J'ai écrit "Introduction à la vérification des effets" en Python
À propos de la différence entre "==" et "is" en python