Gibt es einen Unterschied zwischen "continue" und "pass" in einer for-Schleife in Python?

274

Gibt es einen signifikanten Unterschied zwischen den beiden Python-Schlüsselwörtern continueund passähnlich wie in den Beispielen?

for element in some_list:
    if not element:
        pass

und

for element in some_list:
    if not element:
        continue

Ich sollte mir bewusst sein?

Aufwind
quelle
4
@ S.Lott: Das Beispiel: while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)In den Python-Dokumenten hat mich verwirrt, dass ich es nicht klar fand, ob es sich in diesem Fall äquivalent verhält, um fortzufahren, oder dass etwas anderes beabsichtigt war. Der erste Satz "Die Pass-Anweisung macht nichts." charakterisiert alle Antworten auf meine Frage, aber irgendwie ist es mir nicht aufgefallen.
Aufwind

Antworten:

400

Ja, sie machen ganz andere Dinge. passtut einfach nichts, während continuemit der nächsten Schleifeniteration fortgefahren wird. In Ihrem Beispiel wird der Unterschied deutlich, wenn Sie nach if: Folgendes hinzufügen : Nach der Ausführung passwird diese weitere Anweisung ausgeführt. Danach continuewürde es nicht.

>>> 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
Sven Marnach
quelle
7
Ich bin völlig einverstanden mit Ihrer Antwort. Aber ich habe immer noch Fragen zum Pass-Schlüsselwort. Wird es benötigt? und gebraucht aber warum? Vielen Dank
Hardik Gajjar
34
@HardikGajjar: Da das passSchlüsselwort nichts bewirkt, ist es nur nützlich, wenn Sie syntaktisch eine eingerückte Suite benötigen, aber nichts tun möchten. Ein häufiges Beispiel ist, wenn Sie eine Ausnahme ignorieren möchten, die Sie verwenden except SomeException: pass. Es gibt auch viele andere Anwendungsfälle. Sie würden dafür nicht unbedingt ein Schlüsselwort benötigen, da Sie jede andere Anweisung verwenden könnten, die nichts bewirkt (z. B. 0eine vollkommen gültige Anweisung, die keine Wirkung hat), aber wenn Sie ein Schlüsselwort dafür haben, können Sie dies tun expliziter darüber, nichts tun zu wollen.
Sven Marnach
@SvenMarnach ist es stilistisch verpönt, Ausnahmen zu behandeln pass?
Björks Nummer eins Fan
@ MikePalmice Überhaupt nicht.
Matt M.
73

Ja, da gibt es einen Unterschied. continueErzwingt, dass die Schleife bei der nächsten Iteration startet, während dies passbedeutet, dass hier kein Code ausgeführt werden muss, und wird durch den Rest oder den Schleifenkörper fortgesetzt.

Führen Sie diese aus und sehen Sie den Unterschied:

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

quelle
23

continuespringt zurück zum Anfang der Schleife. passwird die Verarbeitung fortsetzen.

Wenn der Durchgang am Ende der Schleife ist, ist der Unterschied vernachlässigbar, da der Fluss ohnehin nur zum oberen Ende der Schleife zurückkehren würde.

tMC
quelle
11

In Ihrem Beispiel gibt es keinen Unterschied, da beide Anweisungen am Ende der Schleife erscheinen. passist einfach ein Platzhalter, da er nichts tut (er führt die Ausführung an die nächste Anweisung weiter). continueAuf der anderen Seite hat es einen bestimmten Zweck: Es weist die Schleife an, fortzufahren, als ob sie gerade neu gestartet worden wäre.

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

ist ganz anders als

for element in some_list:
    if not element:
        continue
    print element
mehrere Schnittstellen
quelle
6

Es gibt einen Unterschied zwischen ihnen,
continueüberspringt die aktuelle Iteration der Schleife und führt die nächste Iteration aus.
passtut nichts. Es ist ein leerer Platzhalter für Anweisungen.
Ich möchte Ihnen lieber ein Beispiel geben, das dies besser verdeutlicht.

>>> 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
Gehen
quelle
5

Ja, da gibt es einen Unterschied. Continueüberspringt tatsächlich den Rest der aktuellen Iteration der Schleife (zurück zum Anfang). Passist eine leere Aussage, die nichts tut.

Siehe die Python-Dokumente

froadie
quelle
4

In diesen Beispielen Nr. Wenn die Anweisung nicht die allerletzte in der Schleife ist, haben sie sehr unterschiedliche Auswirkungen.

Ignacio Vazquez-Abrams
quelle
3

Unterschied zwischen Pass und Continue in einer for-Schleife:

Warum also Python übergeben?

Wenn Sie eine leere Klasse, Methode oder einen leeren Block erstellen möchten.

Beispiele:

class MyException(Exception):
    pass


try:
   1/0
 except:
   pass

Ohne 'Pass' in den obigen Beispielen wird IndentationError ausgelöst.

Joby Wilson Mathews
quelle
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."

Die Ausgabe ist

>>> This statement is from pass.

Lassen Sie denselben Code erneut mit geringfügigen Änderungen ausführen.

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

Die Ausgabe ist -

>>> 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 macht nichts. Die Berechnung bleibt davon unberührt. Aber continue kehrt zum Anfang der Schleife zurück, um mit der nächsten Berechnung fortzufahren.

Raviteja Ainampudi
quelle
3
Was ist der besondere Unterschied zu anderen bereits verfügbaren Antworten?
BHUVANESH MOHANKUMAR
1

Betrachten Sie es so:

Bestehen: Python arbeitet nur mit Einrückungen! Im Gegensatz zu anderen Sprachen gibt es keine leeren geschweiften Klammern.

Wenn Sie also nichts tun möchten, falls eine Bedingung erfüllt ist, gibt es keine andere Option als Bestehen.

Weiter: Dies ist nur bei Schleifen sinnvoll. Wenn Sie für einen Wertebereich die verbleibenden Anweisungen der Schleife nicht ausführen möchten, nachdem diese Bedingung für diesen bestimmten Durchgang erfüllt ist, müssen Sie continue verwenden.

Vaishali
quelle
Wenn Sie also nichts tun möchten, falls eine Bedingung erfüllt ist, gibt es keine andere Option als bestanden -> dies ist nicht korrekt, siehe z. B. den Kommentar von Sven Marnach oben.
Patrick
1
@patrick Sorry, aber er ist richtig. In dem Fall , wo zum Beispiel kann eine Variable sowohl einen Schwimmer und ein int, und Sie möchten eine Operation auf allen ints ausführen, dann können Sie einfach eine if-Anweisung , dass die Kontrollen für Schwimmer, einen verwenden , passwenn die Aussage Trueund führen Sie die Operation aus, wenn dies der Fall ist False. Dies ermöglicht ein effizientes Scannen von Mehrzwecklisten.
1313e
0

passkann in Szenarien verwendet werden, in denen Sie einige leere Funktionen, Klassen oder Schleifen für zukünftige Implementierungen benötigen und kein Code ausgeführt werden muss.
continuewird in Szenarien verwendet, in denen nein, wenn eine Bedingung innerhalb einer Schleife erfüllt ist und Sie die aktuelle Iteration überspringen und zur nächsten wechseln müssen.

prafi
quelle