2012-02-28 15 views
136

¿Hay alguna diferencia significativa entre las dos palabras clave entre el pitón continue y pass como en los ejemplos¿Hay una diferencia entre `continue` y` pass` en un ciclo for en python?

for element in some_list: 
    if not element: 
     pass 

y

for element in some_list: 
    if not element: 
     continue 

que debería tener en cuenta?

+4

@ S.Lott: El ejemplo: 'while True :; pass # Busy-wait for keyboard interrupt (Ctrl + C) 'en [python docs] (http://docs.python.org/tutorial/controlflow.html#pass-statements) me confundió en el camino, que no hice No es claro que el clima se comporte de manera equivalente a continuar en este caso o que se haya intentado algo más. La primera oración * "La declaración del pase no hace nada." * Caracteriza todas las respuestas a mi pregunta, pero de alguna manera no me llamó la atención. – Aufwind

Respuesta

213

Sí, hacen cosas completamente diferentes. pass simplemente no hace nada, mientras que continue continúa con la siguiente iteración de bucle. En su ejemplo, la diferencia se haría evidente si agregara otra instrucción después del if: Después de ejecutar pass, se ejecutará esta instrucción adicional. Después de 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 
+2

estoy totalmente de acuerdo con su respuesta. pero aún tengo dudas con respecto a la palabra clave pass ¿es necesaria? y necesario, pero ¿por qué? Gracias –

+12

@HardikGajjar: Dado que la palabra clave 'pass' no hace nada, solo es útil cuando sintácticamente necesita un sangrado, pero no quiere hacer nada. Un ejemplo común es si desea ignorar alguna excepción, usa 'excepto SomeException: pass'. Hay muchos otros casos de uso también. No necesitarás estrictamente una palabra clave para esto, ya que puedes usar cualquier otra declaración que no haga nada (por ejemplo, '0' es una declaración perfectamente válida que no tiene ningún efecto), pero tener una palabra clave para esto permite usted debe ser más explícito acerca de no querer hacer nada. –

3

En esos ejemplos, no. Si la instrucción es no la última en el ciclo, entonces tienen muy efectos diferentes.

6

continue saltará de nuevo a la parte superior del lazo. pass continuará procesando.

si el pase está en el extremo del bucle, la diferencia es insignificante ya que el flujo simplemente volvería a la parte superior del bucle de todos modos.

7

En su ejemplo, no habrá ninguna diferencia, ya que ambas declaraciones aparecen al final del ciclo. pass es simplemente un marcador de posición, en el sentido de 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 continuar como si acabara de reiniciarse.

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 
45

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

ejecutar estas y ver 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 
4

sí, hay una diferencia. Continue en realidad omite el resto de la iteración actual del ciclo (volviendo al principio). Pass es una declaración en blanco que no hace nada.

Véase el python docs

1

Hay una diferencia entre ellos,
continue se salta la iteración actual del bucle y ejecuta la siguiente iteración.
pass no hace nada. Es un marcador de posición de declaración vacío.
Prefiero darles un ejemplo, lo cual aclarará esto mucho 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 
0
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. 

Una vez más, dejar el mismo código de correr 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. 

Pass no hace nada. La computación no se ve afectada. Pero continue vuelve a la parte superior del ciclo para procesar con el siguiente cálculo.

+3

¿Cuál es la diferencia especial con otras respuestas ya disponibles? –

Cuestiones relacionadas