C'è una differenza tra `continue` e` pass` in un ciclo for in Python?


274

C'è qualche differenza significativa tra le due parole chiave di Python continuee passcome negli esempi

for element in some_list:
    if not element:
        pass

e

for element in some_list:
    if not element:
        continue

Dovrei essere consapevole?


4
@ S.Lott: L'esempio: while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)nei documenti di Python mi ha confuso il modo in cui non ho trovato il tempo limpido che si comporta in modo equivalente a continuare in questo caso o qualcos'altro era previsto. La prima frase "L'istruzione pass non fa nulla". caratterizza tutte le risposte alla mia domanda, ma in qualche modo non ha attirato la mia attenzione.
Aufwind,

Risposte:


400

Sì, fanno cose completamente diverse. passsemplicemente non fa nulla, mentre continuecontinua con l'iterazione del ciclo successivo. Nel tuo esempio, la differenza risulterebbe evidente se aggiungessi un'altra istruzione dopo if: Dopo l'esecuzione pass, questa ulteriore istruzione verrà eseguita. Dopo continue, non lo farebbe.

>>> 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

7
Sono totalmente d'accordo con la tua risposta. ma ho ancora domande riguardanti la parola chiave pass è necessaria? e necessario ma perché? Grazie
Hardik Gajjar il

34
@HardikGajjar: poiché la passparola chiave non fa nulla, è utile solo quando hai bisogno sintatticamente di una suite rientrata, ma non vuoi fare nulla. Un esempio comune è se si desidera ignorare qualche eccezione, si utilizza except SomeException: pass. Esistono anche molti altri casi d'uso. Non avresti strettamente bisogno di una parola chiave per questo, dal momento che potresti usare qualsiasi altra istruzione che non fa nulla (ad esempio 0è un'istruzione perfettamente valida che non ha alcun effetto), ma avere una parola chiave per questo ti consente di essere più esplicito di non voler fare nulla.
Sven Marnach,

@SvenMarnach è accigliato stilisticamente per trattare le eccezioni pass?
3

@MikePalmice Niente affatto.
Matt M.

73

Sì, c'è differenza. continueimpone che il ciclo inizi alla successiva iterazione mentre passsignifica "non c'è codice da eseguire qui" e continuerà attraverso il resto o il corpo del ciclo.

Esegui questi e vedi la differenza:

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

continuetornerà all'inizio del ciclo. passcontinuerà l'elaborazione.

se il passaggio è alla fine del loop, la differenza è trascurabile in quanto il flusso tornerebbe comunque all'inizio del loop.


11

Nel tuo esempio, non ci sarà alcuna differenza, poiché entrambe le istruzioni appaiono alla fine del ciclo. passè semplicemente un segnaposto, in quanto non fa nulla ( passa l' esecuzione alla dichiarazione successiva). continued'altra parte, ha uno scopo preciso: dice al loop di continuare come se fosse appena stato riavviato.

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

è molto diverso da

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

6

C'è una differenza tra loro,
continuesalta l'iterazione corrente del ciclo ed esegue l'iterazione successiva.
passnon fa nulla. È un segnaposto vuoto.
Preferirei darvi un esempio, che chiarirà meglio questo aspetto.

>>> 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ì, c'è differenza. Continuesalta effettivamente il resto dell'iterazione corrente del loop (tornando all'inizio). Passè un'istruzione vuota che non fa nulla.

Vedi i documenti di Python



3

Differenza tra pass e continue in un ciclo for:

Quindi perché passare in pitone?

Se si desidera creare una classe, un metodo o un blocco vuoti.

Esempi:

class MyException(Exception):
    pass


try:
   1/0
 except:
   pass

senza "pass" negli esempi sopra genererà 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."

L'output è

>>> This statement is from pass.

Ancora una volta, esegui lo stesso codice con modifiche minori.

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."

L'output è -

>>> 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 non fa nulla. Il calcolo non è interessato. Ma continue torna all'inizio del ciclo per essere processato con il calcolo successivo.


3
Qual è la differenza speciale con altre risposte già disponibili?
BHUVANESH MOHANKUMAR,

1

Consideralo in questo modo:

Pass: Python funziona esclusivamente su rientro! Non ci sono parentesi graffe vuote, a differenza di altre lingue.

Quindi, se non si desidera fare nulla nel caso in cui una condizione sia vera, non esiste altra opzione che passare.

Continua: è utile solo in caso di loop. Nel caso in cui, per un intervallo di valori, non desideri eseguire le restanti istruzioni del ciclo dopo che quella condizione è vera per quel particolare passaggio, dovrai usare continue.


Quindi, se non vuoi fare nulla nel caso in cui una condizione sia vera, non esiste altra opzione che passare -> questo non è accurato, vedi ad esempio il commento di Sven Marnach sopra.
patrick,

1
@patrick Siamo spiacenti, ma ha ragione. Nel caso in cui, ad esempio, una variabile possa essere sia un float che un int e desideri eseguire un'operazione su tutti gli ints, puoi semplicemente usare un'istruzione if che verifica la presenza di float, usa un passse l'istruzione è Trueed esegui l'operazione se lo è False. Ciò consente una scansione efficiente di elenchi multiuso.
1313e,

0

passpotrebbe essere utilizzato in scenari in cui sono necessarie alcune funzioni, classi o loop vuoti per future implementazioni e non è necessario eseguire alcun codice.
continueviene utilizzato in scenari in cui no quando si è verificata una condizione all'interno di un ciclo ed è necessario saltare l'iterazione corrente e passare a quella successiva.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.