Boolesche Werte und Ausdrücke¶
In Python gibt es mehrere Möglichkeiten, boolesche Werte auszudrücken; die
boolesche Konstante False, 0, der Python-Typ None und
leere Werte (z.B. die leere Liste [] oder die leere
Zeichenkette "") werden alle als False betrachtet. Die boolesche
Konstante True und alles andere wird als True betrachtet.
<,<=,==,>,>=vergleicht Werte:
>>> x = 3 >>> y = 3.0 >>> z = [3, 4, 5] >>> x == y True
Warnung
Berechnete Fließkommazahlen sollten nie unmittelbar miteinander verglichen werden:
>>> u = 0.6 * 7 >>> v = 0.7 * 6 >>> u == v False >>> u 4.2 >>> v 4.199999999999999
Stattdessen könnt ihr
math.isclose()verwenden:>>> import math >>> math.isclose(u, v) True
Alternativ könnt ihr auch
round()verwenden:>>> round(u, 2) == round(v, 2) True
Warnung
Ganzzahlen kleiner als -5 oder größer 256 werden jedes Mal neu erstellt, die Ganzzahlen dazwischen sind jedoch vom Interpreter vorinstanziiert und werden wiederverwendet. Daher sollte
id()nicht für Vergleiche von Ganzzahlen verwendet werden:>>> x = 256 >>> y = 257 >>> id(x) == id(256) True >>> id(y) == id(257) False
is,is not,in,not inüberprüft die Identität:
>>> x is y False >>> x is not y True >>> x in z True >>> id(x) 4375911432 >>> id(y) 4367574480 >>> id(z[0]) 4375911432
Wenn
xundz[0]die gleiche ID im Speicher haben, bedeutet das, dass wir an zwei Stellen auf dasselbe Objekt verweisen.Der
is-Operator wird meist bei Werten verwendet, die nur einmal im Speicher vorhanden sind, sog. Singleton-Objekte. So ist die Überprüfung auf None die häufigste Verwendung desis-Operators.>>> x is None False >>> x is not None True
Auch der Python-Style-Guide in PEP 8 empfiehlt, dass ihr auf Identität mit None und nicht auf Werte überprüfen solltet, also niemals
x == None, sondern stattdessen immerx is Noneverwenden solltet.and,not,orsind logische Operatoren, mit denen wir die oben genannten Überprüfungen verknüpfen können:
>>> x is y and x is z[0] False >>> x is y or x is z[0] True >>> x is y and not x is z[0] False >>> x is z[0] and not x is y True