Ich bin gerade dabei, Python zu lernen und habe den Abschnitt über die pass
Aussage erreicht. Der Leitfaden, den ich verwende, definiert ihn als eine Null
Anweisung, die üblicherweise als Platzhalter verwendet wird.
Ich verstehe immer noch nicht ganz, was das bedeutet. Kann mir jemand eine einfache / grundlegende Situation zeigen, in der die pass
Aussage verwendet wird und warum sie benötigt wird?
pass
dass es nützlich wäre, wenn Sie eine Methode in einer Unterklasse überschreiben möchten, um nichts zu tun.pass
derexcept
Block sehr praktisch.Antworten:
Angenommen, Sie entwerfen eine neue Klasse mit einigen Methoden, die Sie noch nicht implementieren möchten.
Wenn Sie
pass
das weglassen würden, würde der Code nicht ausgeführt.Sie würden dann eine bekommen:
Zusammenfassend lässt sich sagen, dass die
pass
Aussage nichts Besonderes bewirkt, aber wie hier gezeigt als Platzhalter fungieren kann.quelle
return
, allerdings mit einem leichten Verlust an Klarheit.pass
, aber ich verstehe immer noch nicht wirklich, was es tut. Gibt es eine Verwendung dafür im Produktionscode? In Ihrem Beispiel würde ich mich dafür entscheiden, diese Methode erst hinzuzufügen, wenn ich bereit bin, sie zu implementieren, oder ich würde es einfach tunreturn
.Python hat die syntaktische Anforderung , dass Codeblocks (nach
if
,except
,def
,class
etc.) nicht leer sein. Leere Codeblöcke sind jedoch in einer Vielzahl unterschiedlicher Kontexte nützlich, wie in den folgenden Beispielen, die die häufigsten Anwendungsfälle sind, die ich gesehen habe.Wenn in einem Codeblock nichts passieren soll,
pass
wird a benötigt, damit ein solcher Block kein erzeugtIndentationError
. Alternativ kann jede Anweisung (einschließlich nur eines zu bewertenden Begriffs, wie dasEllipsis
Literal...
oder eine Zeichenfolge, meistens eine Dokumentzeichenfolge) verwendet werden. Diespass
macht jedoch deutlich, dass tatsächlich nichts passieren soll und nicht tatsächlich ausgewertet werden muss und (zumindest vorübergehend) gespeichert.Ignorieren (aller oder) einer bestimmten Art von
Exception
(Beispiel ausxml
):Hinweis: Das Ignorieren aller Arten von Erhöhungen, wie im folgenden Beispiel aus
pandas
, wird im Allgemeinen als schlechte Praxis angesehen, da es auch Ausnahmen abfängt, die wahrscheinlich an den Anrufer weitergegeben werden sollten, z. B.KeyboardInterrupt
oderSystemExit
(oder sogarHardwareIsOnFireError
- Woher wissen Sie, dass Sie es nicht sind? Laufen auf einer benutzerdefinierten Box mit bestimmten definierten Fehlern, über die eine aufrufende Anwendung Bescheid wissen möchte?).Stattdessen wird die Verwendung von mindestens
except Error:
oder in diesem Fall vorzugsweiseexcept OSError:
als viel bessere Praxis angesehen. Eine schnelle Analyse aller von mir installierten Python-Module ergab, dass mehr als 10% allerexcept ...: pass
Anweisungen alle Ausnahmen abfangen. Daher ist dies in der Python-Programmierung immer noch ein häufiges Muster.Ableiten einer Ausnahmeklasse, die kein neues Verhalten hinzufügt (z. B. in
scipy
):In ähnlicher Weise haben Klassen, die als abstrakte Basisklasse gedacht sind, häufig eine explizite leere
__init__
oder andere Methoden, die Unterklassen ableiten sollen. (zBpebl
)Das Testen dieses Codes wird für einige Testwerte ordnungsgemäß ausgeführt, ohne sich um die Ergebnisse (von
mpmath
) zu kümmern :In Klassen- oder Funktionsdefinitionen ist häufig bereits ein Dokumentstring als obligatorische Anweisung vorhanden , die als einziges Element im Block ausgeführt werden muss. In solchen Fällen kann der Block
pass
zusätzlich zur Dokumentzeichenfolge enthalten, um zu sagen: "Dies soll in der Tat nichts bewirken.", Zum Beispiel inpebl
:In einigen Fällen
pass
wird als Platzhalter verwendet , zu sagen : „Diese Methode / Klasse / if-Block / ... wurde noch nicht implementiert, aber das wird der Ort , es zu tun sein“, obwohl ich persönlich die es vorziehen ,Ellipsis
wörtlichen ,...
um Unterscheiden Sie streng zwischen diesem und dem absichtlichen „No-Op“ im vorherigen Beispiel. ( Beachten Sie, dass das Ellipsen-Literal nur in Python 3 ein gültiger Ausdruck ist. )Wenn ich beispielsweise ein Modell in großen Strichen schreibe, schreibe ich möglicherweise
wo andere haben könnten
Vor
Zur Erinnerung, um die
update_agent
Funktion zu einem späteren Zeitpunkt auszufüllen , führen Sie jedoch bereits einige Tests durch, um festzustellen, ob sich der Rest des Codes wie beabsichtigt verhält. (Eine dritte Option für diesen Fall istraise NotImplementedError
. Dies ist insbesondere in zwei Fällen nützlich: Entweder "Diese abstrakte Methode sollte von jeder Unterklasse implementiert werden, es gibt keine generische Möglichkeit, sie in dieser Basisklasse zu definieren" oder "Diese Funktion mit Dieser Name ist in dieser Version noch nicht implementiert, aber so wird seine Signatur aussehen. “ )quelle
Neben der Verwendung als Platzhalter für nicht implementierte Funktionen
pass
kann es hilfreich sein, eine if-else-Anweisung auszufüllen ("Explizit ist besser als implizit.")Natürlich würde man in diesem Fall wahrscheinlich
return
anstelle der Zuordnung verwenden, aber in Fällen, in denen eine Mutation gewünscht wird, funktioniert dies am besten.Die Verwendung von
pass
hier ist besonders nützlich, um zukünftige Betreuer (einschließlich Sie selbst!) Zu warnen, keine redundanten Schritte außerhalb der bedingten Anweisungen zu setzen. Im obigen Beispielflag
wird in den beiden speziell genannten Fällen gesetzt, jedoch nicht imelse
Fall. Ohne Verwendungpass
kann sich ein zukünftiger Programmierer möglicherweiseflag = True
außerhalb der Bedingung bewegen und somitflag
in allen Fällen einstellen .Ein anderer Fall ist die Boilerplate-Funktion, die häufig am Ende einer Datei angezeigt wird:
In einigen Dateien kann es hilfreich sein, dies dort
pass
zu belassen, um später eine einfachere Bearbeitung zu ermöglichen, und um deutlich zu machen, dass nichts erwartet wird, wenn die Datei alleine ausgeführt wird.Schließlich kann es, wie in anderen Antworten erwähnt, nützlich sein, nichts zu tun, wenn eine Ausnahme abgefangen wird:
quelle
flag = False
vor demif ... elif
Block setzen, um später unklare Fehler "NameError: Name 'Flag' ist nicht definiert" zu vermeiden. In Bezug auf das zweite Beispiel scheint es bizzar,if __name__ == "__main__": pass
die Mehrheit der Python-Dateien hinzufügen zu müssen, die bei direkter Ausführung nichts tun (was der Fall ist, wenn Sie modularen Code schreiben). Bei Python> = 3.0 sollten Sie...
(Auslassungspunkte) verwenden, anstattpass
"Später beenden" -Blöcke anzugeben.Die beste und genaueste Art zu denken
pass
ist, den Dolmetscher explizit anzuweisen, nichts zu tun. Auf die gleiche Weise den folgenden Code:bedeutet "Wenn ich die Funktion foo (x, y) aufrufe, summiere die beiden Zahlen, die die Bezeichnungen x und y darstellen, und gib das Ergebnis zurück",
bedeutet "Wenn ich die Funktionsleiste () aufrufe, mache ich absolut nichts."
Die anderen Antworten sind ganz richtig, aber es ist auch nützlich für ein paar Dinge, bei denen es nicht um Platzhalter geht.
Zum Beispiel war es in einem Code, an dem ich erst kürzlich gearbeitet habe, notwendig, zwei Variablen zu teilen, und es war möglich, dass der Teiler Null war.
erzeugt offensichtlich einen ZeroDivisionError, wenn b Null ist. In dieser speziellen Situation war es das gewünschte Verhalten, c als Null zu belassen, falls b Null war, daher habe ich den folgenden Code verwendet:
Eine andere, weniger standardmäßige Verwendung ist ein praktischer Ort, um einen Haltepunkt für Ihren Debugger festzulegen. Zum Beispiel wollte ich, dass bei der 20. Iteration einer for ... in-Anweisung ein bisschen Code in den Debugger eindringt. Damit:
mit dem Haltepunkt auf Pass.
quelle
def bar(): pass
macht nicht "absolut nichts". Es kehrtNone
implizit immer noch zurück .Ein häufiger Anwendungsfall, in dem es "wie es ist" verwendet werden kann, besteht darin, eine Klasse zu überschreiben, nur um einen Typ zu erstellen (der ansonsten mit der Oberklasse identisch ist), z
So können Sie
Error
Ausnahmen auslösen und abfangen . Was hier zählt, ist eher die Art der Ausnahme als der Inhalt.quelle
pass
in Python macht im Grunde nichts, aber im Gegensatz zu einem Kommentar wird es vom Interpreter nicht ignoriert. Sie können es also an vielen Orten nutzen, indem Sie es zu einem Platzhalter machen:1: Kann im Unterricht verwendet werden
2: Kann in Schleifen- und bedingten Anweisungen verwendet werden:
3: Kann in der Funktion verwendet werden:
pass
wird meistens verwendet, wenn der Programmierer im Moment keine Implementierung geben möchte, aber dennoch eine bestimmte Klassen- / Funktions- / Bedingungsanweisung erstellen möchte, die später verwendet werden kann. Da der Python-Interpreter keine leere oder nicht implementierte Anweisung class / function / conditional zulässt, wird ein Fehler ausgegeben:pass
kann in solchen Szenarien verwendet werden.quelle
Sie können sagen, dass Pass NOP bedeutet (No Operation) Betrieb. Nach diesem Beispiel erhalten Sie ein klares Bild: -
C Programm
Nun, wie werden Sie das in Python schreiben: -
Ihr Code gibt jedoch einen Fehler aus, da nach elif ein eingerückter Block erforderlich ist . Hier ist die Rolle des Schlüsselworts pass .
Jetzt denke ich, es ist dir klar.
quelle
&&
Operator existiert nicht in PythonIch benutze es gerne, wenn ich Tests auslösche. Ich bin mir oft bewusst, was ich testen möchte, weiß aber nicht genau, wie ich es machen soll. Das Testbeispiel sieht so aus, wie es sebastian_oe vorgeschlagen hat
quelle
assert False
assert 0
Die pass-Anweisung macht nichts. Es kann verwendet werden, wenn eine Anweisung syntaktisch erforderlich ist, das Programm jedoch keine Aktion erfordert.
quelle
Ehrlich gesagt denke ich, dass die offiziellen Python-Dokumente es ziemlich gut beschreiben und einige Beispiele liefern:
quelle
Wie das Buch sagte, benutze ich es immer nur als temporären Platzhalter, dh
und füllen Sie später das Szenario aus, in dem
var == 2000
quelle
Pass bezieht sich auf Ignorieren .... so einfach wie es ist .... Wenn die angegebene Bedingung wahr ist und die nächste Anweisung Pass ist, ignoriert sie diesen Wert oder diese Iteration und fährt mit der nächsten Zeile fort ..... Beispiel
Ausgabe: Druckt alle ungeraden Zahlen von 1-100
Dies liegt daran, dass der Modul der geraden Zahl gleich Null ist, daher die Zahl ignoriert und zur nächsten Zahl übergeht, da der Modul der ungeraden Zahlen ungleich Null ist, wird der andere Teil der Schleife ausgeführt und gedruckt
quelle
SyntaxError
. Auch dies ist keine gute Verwendung,pass
weil Sie einfach tun könntenfor i in range(1,100):print(i)if i%2else""
Hier ist ein Beispiel, in dem ich bestimmte Daten aus einer Liste extrahiert habe, in der ich mehrere Datentypen hatte (so würde ich es in R nennen - sorry, wenn es die falsche Nomenklatur ist) und ich wollte nur ganzzahlige / numerische und NICHT Zeichendaten extrahieren .
Die Daten sahen aus wie:
Ich wollte alle alphabetischen Zeichen entfernen, also ließ ich die Maschine die Daten unterteilen und die alphabetischen Daten "übergeben":
quelle
Die pass-Anweisung in Python wird verwendet, wenn eine Anweisung syntaktisch erforderlich ist, Sie jedoch keinen Befehl oder Code ausführen möchten.
Die pass-Anweisung ist eine Nulloperation. nichts passiert, wenn es ausgeführt wird. Der Pass ist auch an Stellen nützlich, an denen Ihr Code irgendwann abgelegt wird, aber noch nicht geschrieben wurde (z. B. in Stubs):
`Beispiel:
Dies führt zu folgendem Ergebnis:
Der vorhergehende Code führt keine Anweisung oder keinen Code aus, wenn der Wert des Buchstabens 'h' ist. Die pass-Anweisung ist hilfreich, wenn Sie einen Codeblock erstellt haben, diese jedoch nicht mehr benötigt wird.
Sie können dann die Anweisungen innerhalb des Blocks entfernen, den Block jedoch mit einer pass-Anweisung belassen, damit andere Teile des Codes nicht beeinträchtigt werden.
quelle
pass wird verwendet, um Einrückungsfehler in Python zu vermeiden. Wenn wir Sprachen wie c, c ++, java verwenden, haben sie geschweifte Klammern wie
In Python wurden jedoch Einrückungen anstelle von geschweiften Klammern verwendet, um solche Fehler zu vermeiden, verwenden wir pass. Erinnert, als Sie ein Quiz spielten und
Beispielprogramm,
quelle