Wenn leer set()
ist False
, sollte die if test == False
-Klausel im folgenden Code nicht zu True
ausgewertet werden?
Ausgabe:
%Vor% Vereinfacht gesagt wird der Gleichheitsoperator ==
einen Gleichheitsvergleich zwischen diesen beiden Objekten durchführen: Eine Menge und ein boolescher Wert werden niemals gleich sein, daher ist das Ergebnis des Vergleichs falsch. Auf der anderen Seite überprüft nur if obj
(oder if not obj
) die Richtigkeit des Objekts, was für jedes Objekt ausgewertet werden kann. In gewisser Weise macht dies tatsächlich eine Typumwandlung mit if bool(obj)
. Und für leere Mengen ist das falsch.
Diese beiden Vorgänge rufen im Datenmodell verschiedene spezielle Methodennamen auf. Beim Vergleich zweier Objekte mit dem Gleichheitsoperator wird __eq__
aufgerufen, während bool()
aufgerufen wird Ein Objekt ruft __bool__
auf.
Der Operator ==
prüft die Werte von 2 Objekten und in diesem Fall haben ein leerer set()
und ein falscher Wert keinen gleichen Wert.
Und da Python jede leere Sequenz als False und keine leeren Sequenzen als True bewertet, können Sie, wenn Sie die Validierung des test
-Objekts überprüfen möchten, einfach if
:
Jedes Objekt kann auf Wahrheitswert getestet werden, um es in einer if- oder while-Bedingung oder als Operand der folgenden booleschen Operationen zu verwenden. Die folgenden Werte gelten als falsch:
Listenelement
Keine
Falsch
Null eines beliebigen numerischen Typs, z. B. 0, 0.0, 0j.
eine leere Sequenz, zum Beispiel '', (), [].
jede leere Zuordnung, z. B. {}.
Instanzen von benutzerdefinierten Klassen, wenn die Klasse eine Methode
__bool__()
oder__len__()
definiert, wenn diese Methode die Ganzzahl null oder den bool-Wert False zurückgibt.Alle anderen Werte werden als wahr betrachtet - also sind Objekte vieler Typen immer wahr.
Der entscheidende Punkt ist, dass False
nicht der einzige Wert ist, der als falsch angesehen wird. Eine leere Menge wird in der Bedingung ebenfalls als falsch interpretiert.
Der explizite Gleichheitstest test == False
ist jedoch nicht wahr, weil eine leere Menge als Definition vom Typ set
ist, die niemals einem booleschen Wert
False
entspricht.
Siehe Boolesche Operationen :
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. Benutzerdefinierte Objekte können ihren Wahrheitswert anpassen, indem sie eine__bool__()
-Methode bereitstellen.
Tags und Links python python-3.x