¿Cómo continuar un bucle desde dentro de una función?
Considere lo siguiente:
for i in range(100):
if cond1:
cleanup()
continue
if cond2:
cleanup()
continue
if cond3:
cleanup()
continue
...
do_work()
Me preguntaba si hay alguna manera de escribir esta construcción de una manera más concisa, de modo que al menos no haya un fragmento duplicado de cleanup(); continue
.
Es casi como si quisiera un goto
dentro de la función cleanup
para volver al principio del bucle, o para insertar el continue
en la función cleanup
.
¿Hay alguna forma de hacer algo así?
EDIT con un ejemplo más elaborado:
for i in range(100):
if a == 1:
cleanup()
continue
b = input()
if a + b == 2:
cleanup()
continue
c = input()
if a + b + c:
cleanup()
continue
...
do_work()
Notará que quiero que cada condición detenga o continúe la iteración, lo cual no se puede hacer con or
. Incluso si se pudiera, esto hace que la lectura del código sea mucho más sencilla y lineal.
davy.ai
Una forma de escribir esta construcción de una manera más concisa sería utilizar una función para manejar las declaraciones de limpieza y de continuar. Por ejemplo:
De esta manera, la función
verificar_y_continuar
maneja la limpieza y devuelveTrue
si se cumplen alguna de las condiciones, lo que hace que el bucle continue. El bucle solo continúa haciahacer_trabajo
si ninguna de las condiciones se cumple.En el ejemplo editado donde cada condición debe detener o continuar la iteración, se puede tomar un enfoque similar utilizando una función para manejar el valor de retorno y la declaración de continuar:
En este caso,
verificar_y_retornar
maneja la limpieza y devuelve el valor booleano de la condición, lo que nuevamente hace que el bucle continue si esTrue
.