Python Language Romper y continuar en bucles


Ejemplo

declaración de break

Cuando una instrucción de break ejecuta dentro de un bucle, el flujo de control se "interrumpe" inmediatamente:

i = 0
while i < 7:
    print(i)
    if i == 4:
        print("Breaking from loop")
        break
    i += 1

El condicional de bucle no se evaluará después de que se ejecute la instrucción break . Tenga en cuenta que las declaraciones de break solo se permiten dentro de los bucles , sintácticamente. No se puede usar una declaración de break dentro de una función para terminar los bucles que llamaron a esa función.

La ejecución de lo siguiente imprime cada dígito hasta el número 4 cuando se cumple la instrucción break y el bucle se detiene:

0
1
2
3
4
Breaking from loop

break declaraciones de break también se pueden usar dentro for bucles, la otra construcción de bucle proporcionada por Python:

for i in (0, 1, 2, 3, 4):
    print(i)
    if i == 2:
        break

La ejecución de este bucle ahora imprime:

0
1
2

Tenga en cuenta que 3 y 4 no se imprimen ya que el bucle ha finalizado.

Si un bucle tiene una cláusula else , no se ejecuta cuando el bucle termina a través de una instrucción de break .

continue declaración

Una instrucción de continue pasará a la siguiente iteración del bucle, omitiendo el resto del bloque actual pero continuando el bucle. Al igual que con break , continue solo puede aparecer dentro de los bucles:

for i in (0, 1, 2, 3, 4, 5):
    if i == 2 or i == 4:
        continue
    print(i)

0
1
3
5

Tenga en cuenta que 2 y 4 no se imprimen, esto se debe a que continue va a la siguiente iteración en lugar de continuar print(i) cuando i == 2 o i == 4 .

Bucles anidados

break y continue solo funciona en un solo nivel de bucle. El siguiente ejemplo solo saldrá del bucle for interno, no del bucle while externo:

while True:
    for i in range(1,5):
        if i == 2:
            break    # Will only break out of the inner loop!

Python no tiene la capacidad de romper múltiples niveles de bucles a la vez; si se desea este comportamiento, refactorizar uno o más bucles en una función y reemplazar la break con el return puede ser la forma de hacerlo.

Usa el return desde dentro de una función como un break

La declaración de return sale de una función, sin ejecutar el código que viene después de ella.

Si tiene un bucle dentro de una función, usar el return desde dentro de ese bucle es equivalente a tener una break ya que el resto del código del bucle no se ejecuta ( tenga en cuenta que cualquier código después del bucle tampoco se ejecuta ):

def break_loop():
    for i in range(1, 5):
        if (i == 2):
            return(i)
        print(i)
    return(5)

Si tiene bucles anidados, la instrucción de return romperá todos los bucles:

def break_all():
    for j in range(1, 5):
        for i in range(1,4):
            if i*j == 6:
                return(i)
            print(i*j)

saldrá:

1 # 1*1
2 # 1*2
3 # 1*3
4 # 1*4
2 # 2*1
4 # 2*2
# return because 2*3 = 6, the remaining iterations of both loops are not executed