Dans Python vous avez deux manières fines de répéter une action plus d'une fois. L'une d'elles est la boucle while
et l'autre - for
loop. un aperçu de deux simples morceaux de code:
for i in range(n):
do_sth()
Et l'autre:
i = 0
while i < n:
do_sth()
i += 1
Ma question est laquelle est la meilleure. Bien sûr, le premier, qui est très courant dans les exemples de documentation et les différents morceaux de code que vous pouvez trouver sur Internet, est beaucoup plus élégant et plus court, mais d'un autre côté, il crée une liste d'entiers complètement inutile juste pour boucler leur. N'est-ce pas un gaspillage de mémoire, surtout en ce qui concerne un grand nombre d'itérations?
Alors qu'en pensez-vous, quelle voie est la meilleure?
mais d'un autre côté, il crée une liste d'entiers complètement inutile juste pour faire une boucle sur eux. N'est-ce pas un gaspillage de mémoire, surtout en ce qui concerne un grand nombre d'itérations?
C'est à cela que sert xrange(n)
. Il évite de créer une liste de nombres et fournit simplement un objet itérateur.
Dans Python 3, xrange()
a été renommé range()
- si vous voulez une liste, vous devez la demander spécifiquement via list(range(n))
.
C'est un poids plus léger que xrange
(et la boucle while) car il n'a même pas besoin de créer les objets int
. Il fonctionne également aussi bien en Python2 qu'en Python3
from itertools import repeat
for i in repeat(None, 10):
do_sth()
La différence fondamentale dans la plupart des langages de programmation est que sauf si l'inattendu se produit, une boucle for
va toujours répéter n
fois puis terminez par une boucle while
il peut répéter 0 times, 1, more or even forever
, en fonction d'une condition donnée qui est toujours vraie au début de chaque boucle et toujours fausse à la sortie de la boucle, (pour être complet a do ... while
boucle, (ou repeat until
), pour les langues qui en disposent, s'exécute toujours au moins une fois et ne garantit pas la condition à la première exécution).
Donc, la réponse à votre question est ' tout dépend de ce que vous essayez de faire '!