¿Hay alguna diferencia entre `continue` y` pass` en un bucle for en python?


274

¿Hay alguna diferencia significativa entre las dos palabras clave de Python continuey passcomo en los ejemplos?

for element in some_list:
    if not element:
        pass

y

for element in some_list:
    if not element:
        continue

Debo estar al tanto?


44
@ S.Lott: El ejemplo: while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)en los documentos de Python me confundió en el camino, que no me pareció que el tiempo fuera claro, se comporta de manera equivalente a continuar en este caso o se pretendía algo más. La primera oración "La declaración de aprobación no hace nada". caracteriza todas las respuestas a mi pregunta, pero de alguna manera no me llamó la atención.
Aufwind

Respuestas:


400

Sí, hacen cosas completamente diferentes. passsimplemente no hace nada, mientras continuecontinúa con la siguiente iteración del bucle. En su ejemplo, la diferencia se hará evidente si agrega otra declaración después de if: Después de ejecutar pass, esta declaración adicional se ejecutará. Después continue, no lo haría.

>>> a = [0, 1, 2]
>>> for element in a:
...     if not element:
...         pass
...     print element
... 
0
1
2
>>> for element in a:
...     if not element:
...         continue
...     print element
... 
1
2

77
Estoy totalmente de acuerdo con tu respuesta. pero todavía tengo dudas sobre la palabra clave pass ¿es necesaria? y necesario pero ¿por qué? Gracias
Hardik Gajjar

34
@HardikGajjar: Dado que la passpalabra clave no hace nada, solo es útil cuando necesita sintácticamente una suite con sangría, pero no quiere hacer nada. Un ejemplo común es si quiere ignorar alguna excepción, la usa except SomeException: pass. También hay muchos otros casos de uso. No necesitaría estrictamente una palabra clave para esto, ya que podría usar cualquier otra declaración que no haga nada (por ejemplo, 0es una declaración perfectamente válida que no tiene un efecto), pero tener una palabra clave para esto le permite ser más explícito sobre no querer hacer nada.
Sven Marnach

@SvenMarnach ¿está mal visto estilísticamente tratar las excepciones pass?
3pitt

@MikePalmice Para nada.
Matt M.

73

Sí, hay una diferencia. continuefuerza al bucle a comenzar en la siguiente iteración mientras que passsignifica "no hay código para ejecutar aquí" y continuará por el resto o el cuerpo del bucle.

Ejecute estos y vea la diferencia:

for element in some_list:
    if not element:
        pass
    print 1 # will print after pass

for element in some_list:
   if not element:
       continue
   print 1 # will not print after continue

23

continuesaltará de nuevo a la parte superior del bucle. passcontinuará procesando.

si pass está al final del ciclo, la diferencia es insignificante ya que el flujo volvería a la parte superior del ciclo de todos modos.


11

En su ejemplo, no habrá diferencia, ya que ambas declaraciones aparecen al final del ciclo. passes simplemente un marcador de posición, ya que no hace nada ( pasa la ejecución a la siguiente instrucción). continue, por otro lado, tiene un propósito definido: le dice al ciclo que continúe como si acabara de reiniciar.

for element in some_list:
    if not element:
        pass
    print element  

es muy diferente de

for element in some_list:
    if not element:
        continue
    print element

6

Hay una diferencia entre ellos,
continueomite la iteración actual del bucle y ejecuta la siguiente iteración.
passno hace nada. Es un marcador de posición de declaración vacía.
Prefiero darle un ejemplo, que aclarará esto mejor.

>>> for element in some_list:
...     if element == 1:
...         print "Pass executed"
...         pass
...     print element
... 
0
Pass executed
1
2

>>> for element in some_list:
...     if element == 1:
...         print "Continue executed"
...         continue
...     print element
... 
0
Continue executed
2

5

Sí, hay una diferencia. Continueen realidad se salta el resto de la iteración actual del bucle (volviendo al principio). Passes una declaración en blanco que no hace nada.

Ver los documentos de Python



3

Diferencia entre pasar y continuar en un ciclo for:

Entonces, ¿por qué pasar en python?

Si desea crear una clase, método o bloque vacío.

Ejemplos:

class MyException(Exception):
    pass


try:
   1/0
 except:
   pass

sin 'pasar' en los ejemplos anteriores arrojará IndentationError.


1
x = [1,2,3,4] 
for i in x:
    if i==2:
         pass  #Pass actually does nothing. It continues to execute statements below it.
         print "This statement is from pass."
for i in x:
    if i==2:
         continue #Continue gets back to top of the loop.And statements below continue are executed.
         print "This statement is from continue."

La salida es

>>> This statement is from pass.

Nuevamente, deje correr el mismo código con cambios menores.

x = [1,2,3,4]
for i in x:
    if i==2:
       pass  #Pass actually does nothing. It continues to execute statements below it.
    print "This statement is from pass."
for i in x:
    if i==2:
        continue #Continue gets back to top of the loop.And statements below continue are executed.
    print "This statement is from continue."

La salida es -

>>> This statement is from pass.
This statement is from pass.
This statement is from pass.
This statement is from pass.
This statement is from continue.
This statement is from continue.
This statement is from continue.

El pase no hace nada. La computación no se ve afectada. Pero continuar vuelve al principio del ciclo para avanzar con el siguiente cálculo.


3
¿Cuál es la diferencia especial con otras respuestas ya disponibles?
BHUVANESH MOHANKUMAR

1

Considéralo de esta manera:

Pase: ¡ Python funciona únicamente en sangría! No hay llaves vacías, a diferencia de otros idiomas.

Por lo tanto, si no desea hacer nada en caso de que una condición sea verdadera, no hay otra opción que pasar.

Continuar: esto es útil solo en caso de bucles. En caso de que, para un rango de valores, no desee ejecutar las declaraciones restantes del bucle después de que esa condición sea verdadera para ese pase en particular, entonces deberá usar continuar.


Entonces, si no desea hacer nada en caso de que una condición sea verdadera, no hay otra opción que pasar -> esto no es exacto, vea, por ejemplo, el comentario de Sven Marnach arriba.
patrick

1
@patrick Lo siento, pero él tiene razón. En el caso en el que, por ejemplo, una variable puede ser tanto flotante como int, y desea realizar una operación en todas las entradas, simplemente puede usar una instrucción if que verifique si hay flotantes, use a passsi la instrucción es Truey realizar la operación si es así False. Esto permite un escaneo eficiente de listas multipropósito.
1313e

0

passpodría usarse en escenarios cuando necesita algunas funciones, clases o bucles vacíos para futuras implementaciones, y no hay ningún requisito para ejecutar ningún código.
continuese usa en escenarios cuando no cuando se cumple alguna condición dentro de un ciclo y necesita omitir la iteración actual y pasar a la siguiente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.