Dupliquer possible:
boucle do-while en python?y a t-il
do until x: ...
en Python, ou un bon moyen d'implémenter une telle construction en boucle?
- -lors de la boucle en Python? (5 réponses )
Réponses
Trop de publicités?Il n'y a pas de boucle do-while en python.
Ceci est une construction similaire, tirée du lien ci-dessus.
while True:
do_something()
if condition():
break
Il n'y a pas préemballés ", tandis que", mais le Python façon de mettre en œuvre particulières les constructions de bouclage est par le biais de générateurs et d'autres itérateurs, par exemple:
import itertools
def dowhile(predicate):
it = itertools.repeat(None)
for _ in it:
yield
if not predicate(): break
ainsi, par exemple:
i=7; j=3
for _ in dowhile(lambda: i<j):
print i, j
i+=1; j-=1
exécute une jambe, comme souhaité, même si le prédicat est déjà fausse au début.
Il est normalement préférable d'encapsuler plus de la boucle de la logique dans votre générateur (ou d'autres itérateur) -- par exemple, si vous avez souvent des cas où une variable augmente, on diminue, et vous avez besoin d'une boucle do-while en les comparant, vous pourriez code:
def incandec(i, j, delta=1):
while True:
yield i, j
if j <= i: break
i+=delta; j-=delta
que vous pouvez utiliser comme:
for i, j in incandec(i=7, j=3):
print i, j
C'est à vous de décider combien de boucle liées à la logique que vous souhaitez mettre à l'intérieur de votre générateur (ou d'autres itérateur) et combien vous voulez avoir en dehors d'elle (comme pour toute autre utilisation d'une fonction, une classe, ou d'un autre mécanisme que vous pouvez utiliser pour refactoriser le code de votre flux principal d'exécution), mais, de façon générale, j'aime voir le générateur utilisé dans un for
boucle qui a peu (idéalement aucun) la "boucle de la logique de contrôle" (code en matière de mise à jour des variables d'état pour la prochaine boucle de la jambe et/ou de faire des tests pour savoir si vous devriez être le bouclage de nouveau ou pas).