In Python können wir dies tun:
%Vor% Der or
und and
Kurzschluss finden Sie in der Boolesche Operationen Dokumentation:
Der Ausdruck
x and y
bewertet zuerstx
; Wennx
falsch ist, wird der Wert zurückgegeben. Andernfalls wirdy
ausgewertet und der resultierende Wert zurückgegeben.Der Ausdruck
x or y
bewertet zuerstx
; Wennx
wahr ist, wird der Wert zurückgegeben. Andernfalls wirdy
ausgewertet und der resultierende Wert zurückgegeben.
Beachten Sie, wie für and
, y
nur ausgewertet wird, wenn x
einen True-Wert ergibt. Umgekehrt wird für or
, y
nur ausgewertet, wenn x
mit einem False-Wert ausgewertet wird.
Für den ersten Ausdruck True or blah
bedeutet dies, dass blah
niemals ausgewertet wird, da der erste Teil bereits True
ist.
Außerdem wird Ihre benutzerdefinierte Blah
-Klasse als True betrachtet:
Im Kontext boolescher Operationen und auch wenn Ausdrücke von Steuerflussanweisungen verwendet werden, werden die folgenden Werte als falsch interpretiert:
False
,None
, numerische Null aller Typen und leere Strings und Container (einschließlich Strings, Tupel, Listen, Wörterbücher, Sets und frozensets). Alle anderen Werte werden als wahr interpretiert. (Eine Möglichkeit, dies zu ändern, finden Sie in der__nonzero__()
speziellen Methode.)
Da Ihre Klasse keine __nonzero__()
-Methode (noch eine __len__
-Methode) implementiert, wird sie als True
betrachtet, soweit boolesche Ausdrücke betroffen sind.
Im Ausdruck blah or blah.notexist
ist blah
somit wahr und blah.notexist
wird nie ausgewertet.
Diese Funktion wird von erfahrenen Entwicklern regelmäßig und effektiv verwendet, meistens um Standardwerte festzulegen:
%Vor%Seien Sie vorsichtig bei der Verkettung und verwenden Sie stattdessen einen bedingten Ausdruck .
Dies wird als Kurzschluss bezeichnet und ist ein Merkmal der Sprache:
Die Booleschen Operatoren
and
undor
sind so genannte Kurzschlussoperatoren: Ihre Argumente werden von links nach rechts ausgewertet und die Auswertung stoppt, sobald das Ergebnis ermittelt wurde. Wenn beispielsweise A und C wahr sind, aber B falsch ist, wertet A und B und C den Ausdruck C nicht aus. Bei Verwendung als allgemeiner Wert und nicht als boolescher Wert ist der Rückgabewert eines Kurzschlussoperators der letzte evaluiertes Argument.
Es ist die Art, wie die Operatoren logische Operatoren, insbesondere or
in Python, arbeiten: Kurzschlussauswertung.
Um es besser zu erklären, überlegen Sie Folgendes:
%Vor%Weitere Informationen finden Sie unter:
Mit dem Operator or
werden Werte von links nach rechts ausgewertet. Nachdem ein Wert zu True
ausgewertet wurde, wird die gesamte Anweisung als True
ausgewertet (es werden also keine weiteren Werte ausgewertet).
Tags und Links python boolean short-circuiting