En los ciclos de Python, hay dos instrucciones que afectan su comportamiento, break y continue. Aunque no son imprescindibles, son comunes en la práctica y es útil conocerlas.
Break
La instrucción break produce una salida del ciclo. No de la función, sino del ciclo. Al encontrarla, el intérprete deja de ejecutar el ciclo actual y pasa a las instrucciones que siguen inmediatamente después del ciclo.
coll = ['one', 'two', 'three', 'four', 'stop', 'five']
for item in coll:
if item == 'stop':
break
print(item)
# => one
# => two
# => three
# => four
Lo mismo es fácil de obtener sin break, usando un ciclo while. Este ciclo es semánticamente mejor para dicha tarea, ya que implica una iteración incompleta:
coll = ['one', 'two', 'three', 'four', 'stop', 'five']
i = 0
while coll[i] != 'stop':
print(coll[i])
i += 1
# => one
# => two
# => three
# => four
El ciclo while es ideal para situaciones en las que el número de iteraciones se desconozca de antemano. Por ejemplo, cuando se espera una condición para salir o cuando se busca un número primo, como en el código de arriba.
Si la condición en el ciclo while es verdadera, entonces el ciclo será infinito. Es importante recordar esto y siempre verificar la condición en este tipo de ciclo:
i = 0
# ¡Ciclo infinito! ¡Es peligroso ejecutarlo!
while True:
print(i)
i += 1
Cuando el número de iteraciones se conoce, es preferible usar un ciclo for. A diferencia del while, el ciclo for in se detendrá garantizadamente después de recorrer todos los elementos, incluso si no se alcanza la condición con break:
coll = ['one', 'two', 'three', 'four', 'five']
for item in coll:
if False:
# La condición nunca se cumplirá, pero el ciclo terminará su trabajo de todos modos
break
print(item)
# => one
# => two
# => three
# => four
# => five
Sin embargo, si necesitamos realizar una acción útil si la condición en el ciclo nunca se cumple, la instrucción else puede ayudar:
# La función devuelve el primer número mayor que el pasado, o None si no hay tal
def find_greater(coll, n):
for item in coll:
if item > n:
# La condición nunca se cumplirá, pero de todos modos, el ciclo completará su trabajo
result = item
break
else:
result = None
return result
find_greater([1, 12, 23], 10) # 12
find_greater([1, 12, 23], 42) # None
Continue
La instrucción continue permite omitir una iteración de ciclo. A continuación un ejemplo con la función compact(), que elimina elementos None de la lista:
def compact(coll):
result = []
for item in coll:
if item is None:
continue
result.append(item)
return result
compact([1, 'foo', None, 42, 'bar']) # [1, 'foo', 42, 'bar']
El código sin continue es más sencillo:
def compact(coll):
result = []
for item in coll:
if item is not None:
result.append(item)
return result
compact([1, 'foo', None, 42, 'bar']) # [1, 'foo', 42, 'bar']
Conclusión
💡 Las instrucciones break y continue ofrecen flexibilidad en el control de las iteraciones, pero en muchos casos, es posible escribir código más simple sin ellas. Si puedes, trata de evitarlas.
Materiales adicionales
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.