Saltar al contenido

¿Hay un “hacer … hasta” en Python?

Solución:

No hay un ciclo do-while en Python.

Esta es una construcción similar, tomada del enlace anterior.

 while True:
     do_something()
     if condition():
        break

Prefiero usar una variable de bucle, ya que tiende a leer un poco mejor que solo “while 1:”, y no tiene un aspecto feo. break declaración:

finished = False
while not finished:
    ... do something...
    finished = evaluate_end_condition()

No hay “do-while” preempaquetado, pero la forma general de Python para implementar construcciones de bucle peculiares es a través de generadores y otros iteradores, por ejemplo:

import itertools

def dowhile(predicate):
  it = itertools.repeat(None)
  for _ in it:
    yield
    if not predicate(): break

así por ejemplo:

i=7; j=3
for _ in dowhile(lambda: i<j):
  print i, j
  i+=1; j-=1

ejecuta un tramo, como se desee, aunque el predicado ya es falso al principio.

Normalmente es mejor encapsular más de la lógica de bucle en su generador (u otro iterador); por ejemplo, si a menudo tiene casos en los que una variable aumenta, una disminuye y necesita un bucle do / while para compararlas, podría codificar :

def incandec(i, j, delta=1):
  while True:
    yield i, j
    if j <= i: break
    i+=delta; j-=delta

que puedes usar como:

for i, j in incandec(i=7, j=3):
  print i, j

Depende de usted cuánta lógica relacionada con el bucle desea poner dentro de su generador (u otro iterador) y cuánto desea tener fuera de él (al igual que para cualquier otro uso de una función, clase u otro mecanismo que pueda usar para refactorizar el código de su flujo principal de ejecución), pero, en general, me gusta ver el generador usado en un for bucle que tiene poca (idealmente ninguna) “lógica de control de bucle” (código relacionado con la actualización de las variables de estado para el siguiente tramo del bucle y / o realizar pruebas sobre si debería volver a realizar el bucle o no).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *