Pourquoi les compréhensions de listes surpassent les ajouts de listes
Malgré la perception des compréhensions de listes comme un simple sucre expressif, elles démontrent un avantage de vitesse significatif par rapport à l'ajout de listes . Cette disparité s'étend au-delà des différences expressives.
Pour illustrer, considérons les références temporelles suivantes :
<code class="python">import timeit time = timeit.timeit('t=[]\nfor i in range(10000):\n t.append(i)', number=10000) time2 = timeit.timeit('t=[i for i in range(10000)]', number=10000)</code>
Les résultats révèlent que la compréhension de liste s'exécute environ 50 % plus rapidement que l'ajout à une liste.
Raisons de l'augmentation de la vitesse
Les compréhensions de listes exploitent plusieurs optimisations de performances :
Exemples
Considérez les extraits de code suivants :
<code class="python">def f1(): l = [] # Create a new list for i in range(5): # Iterate through a range l.append(i) # Append each number to the list def f2(): [i for i in range(5)] # Use list comprehension to create a new list</code>
Le désassemblage de ces fonctions avec le module dis révèle les différences :
<code class="python">dis.dis(f1) dis.dis(f2)</code>
En f1, on observe la création d'une liste ainsi que le chargement et l'appel de l'attribut append (offsets 18 et 20). Dans f2, cependant, ces opérations sont absentes, ce qui donne un code plus efficace.
Conclusion
Les compréhensions de listes permettent d'améliorer les performances en éliminant le chargement d'attributs, les appels de fonction et le temps système associé à la suspension et à la reprise des trames de fonctions. Par conséquent, ils sont souvent recommandés pour créer de nouvelles listes où la rapidité est une priorité.
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!