Les programmeurs Python remarquent souvent un écart de performances important entre la compréhension de listes et l'ajout à une liste. Bien que les compréhensions de listes soient généralement perçues comme une commodité syntaxique, elles démontrent une vitesse supérieure qui va au-delà de la simple expressivité.
Pour illustrer ce phénomène, considérons les mesures de temps suivantes :
>>> import timeit >>> timeit.timeit(stmt=''' t = [] for i in range(10000): t.append(i)''', number=10000) 9.467898777974142 >>> timeit.timeit(stmt='t= [i for i in range(10000)]', number=10000) 4.1138417314859
Comme le montre les mesures, la compréhension de la liste est près de 50 % plus rapide que l'ajout. Examinons les raisons sous-jacentes.
Les compréhensions de listes ne sont pas de simples sucres syntaxiques pour les boucles for régulières. Ils évitent la surcharge associée à l’accès et à l’appel de l’attribut append à chaque itération. Cela élimine la suspension et la reprise des cadres à fonctions multiples, qui sont intrinsèquement plus lentes que la construction directe d'une liste.
L'examen des bytecodes démontés pour les deux approches met en lumière leur disparité de performances :
# Appending to a List 18 LOAD_FAST 0 (l) 20 LOAD_METHOD 1 (append) 22 LOAD_FAST 1 (i) 24 CALL_METHOD 1 26 POP_TOP # List Comprehension 2 BUILD_LIST 0 8 LOAD_FAST 1 (i) 10 LIST_APPEND 2
L'invocation de la méthode append dans la première fonction entraîne une surcharge supplémentaire, tandis que la compréhension de la liste étend directement la liste nouvellement créée.
Dans les scénarios où les performances sont primordiales , la compréhension de liste devrait être l'approche préférée à l'ajout à une liste. Leur vitesse supérieure provient de leur capacité à contourner les bytecodes superflus et la surcharge d'appel de fonction.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!