while statement pass loop jump for finish example python continue

statement - Ejemplo de uso de la declaración "continuar" en Python?



python jump loop (9)

La definición de la declaración continua es:

La instrucción continue continúa con la siguiente iteración del ciclo.

No puedo encontrar ningún buen ejemplo de código.

¿Podría alguien sugerir algunos casos simples donde continue es necesario?


Algunas personas han comentado acerca de la legibilidad, diciendo "Oh, eso no ayuda tanto a la legibilidad, ¿a quién le importa?"

Supongamos que necesita una verificación antes del código principal:

if precondition_fails(message): continue '''''' main code here ''''''

Tenga en cuenta que puede hacer esto después de que se escribió el código principal sin cambiar ese código de todos modos. Si difiere el código, solo se resaltará la línea agregada con "continuar" ya que no hay cambios de espacio en el código principal.

Imagínese si tiene que hacer un breakfix de código de producción, que resulta simplemente agregar una línea con continuar. Es fácil ver que ese es el único cambio cuando revisas el código. Si comienza a envolver el código principal en if / else, diff resaltará el código nuevo con sangrado, a menos que ignore los cambios de espaciado, lo que es especialmente peligroso en Python. Creo que a menos que haya estado en la situación en la que tiene que implementar el código con poca antelación, es posible que no lo aprecie del todo.


Aquí hay un ejemplo simple:

for letter in ''Django'': if letter == ''D'': continue print ''Current Letter:'', letter

La salida será:

Current Letter: j Current Letter: a Current Letter: n Current Letter: g Current Letter: o

Continúa con la siguiente iteración del ciclo:


Digamos que queremos imprimir todos los números que no son múltiplos de 3 y 5

for x in range(0, 101): if x % 3 ==0 or x % 5 == 0: continue #no more code is executed, we go to the next number print x


Me gusta usar continuar en bucles donde hay muchas conticiones para cumplir antes de comenzar a trabajar. Entonces, en lugar de un código como este:

for x, y in zip(a, b): if x > y: z = calculate_z(x, y) if y - z < x: y = min(y, z) if x ** 2 - y ** 2 > 0: lots() of() code() here()

Obtengo un código como este:

for x, y in zip(a, b): if x <= y: continue z = calculate_z(x, y) if y - z >= x: continue y = min(y, z) if x ** 2 - y ** 2 <= 0: continue lots() of() code() here()

Al hacerlo de esta manera evito el código anidado muy profundamente. Además, es fácil optimizar el ciclo eliminando primero los casos más frecuentes, de modo que solo tengo que ocuparme de casos poco frecuentes pero importantes (p. Ej., El divisor es 0) cuando no hay otra interrupción espectacular.


No es absolutamente necesario, ya que se puede hacer con IF pero es más legible y también menos costoso en tiempo de ejecución.

Lo uso para omitir una iteración en un bucle si los datos no cumplen con algunos requisitos:

# List of times at which git commits were done. # Formatted in hour, minutes in tuples. # Note the last one has some fantasy. commit_times = [(8,20), (9,30), (11, 45), (15, 50), (17, 45), (27, 132)] for time in commit_times: hour = time[0] minutes = time[1] # If the hour is not between 0 and 24 # and the minutes not between 0 and 59 then we know something is wrong. # Then we don''t want to use this value, # we skip directly to the next iteration in the loop. if not (0 <= hour <= 24 and 0 <= minutes <= 59): continue # From here you know the time format in the tuples is reliable. # Apply some logic based on time. print("Someone commited at {h}:{m}".format(h=hour, m=minutes))

Salida:

Someone commited at 8:20 Someone commited at 9:30 Someone commited at 11:45 Someone commited at 15:50 Someone commited at 17:45

Como puede ver, el valor incorrecto no lo hizo después de la instrucción continue .


Por ejemplo, si desea hacer diferentes cosas dependiendo del valor de una variable:

for items in range(0,100): if my_var < 10: continue elif my_var == 10: print("hit") elif my_var > 10: print("passed") my_var = my_var + 1

En el ejemplo anterior si utilizo break el intérprete omitirá el ciclo. Pero con continue solo se salta las sentencias if-elif y va directamente al siguiente elemento del ciclo.


Por lo general, la situación donde continue es necesario / útil, es cuando desea omitir el código restante en el ciclo y continuar la iteración.

Realmente no creo que sea necesario, ya que siempre se pueden usar sentencias if para proporcionar la misma lógica, pero podría ser útil para aumentar la legibilidad del código.


def filter_out_colors(elements): colors = [''red'', ''green''] result = [] for element in elements: if element in colors: continue # skip the element # You can do whatever here result.append(element) return result >>> filter_out_colors([''lemon'', ''orange'', ''red'', ''pear'']) [''lemon'', ''orange'', ''pear'']


import random for i in range(20): x = random.randint(-5,5) if x == 0: continue print 1/x

continuar es una declaración de control extremadamente importante. El código anterior indica una aplicación típica, donde se puede evitar el resultado de una división por cero. Lo uso a menudo cuando necesito almacenar el resultado de los programas, pero no quiero almacenar el resultado si el programa se ha bloqueado. Tenga en cuenta que para probar el ejemplo anterior, reemplace la última instrucción con print 1 / float (x), o obtendrá ceros siempre que haya una fracción, ya que randint devuelve un entero. Lo omití por claridad.