Python stellt wahre und falsche Werte mit dem Typ bool dar, der eine Unterklasse von int ist.
In diesem Typ gibt es nur zwei boolesche Werte: True und False.
Diese Werte können einer Variablen zugewiesen und mit den booleschen Operatoren (and, or, not) kombiniert werden:
>>> true_variable = True and True
>>> false_variable = True and False
>>> true_variable = False or True
>>> false_variable = False or False
>>> true_variable = not False
>>> false_variable = not True
Boolesche Operatoren verwenden die Kurzschlussauswertung. Das heißt, der Ausdruck auf der rechten Seite des Operators wird nur ausgewertet, wenn er benötigt wird.
Jeder der Operatoren hat eine andere Priorität, wobei not vor and und or ausgewertet wird.
Klammern können verwendet werden, um einen Teil des Ausdrucks vor den anderen auszuwerten:
>>> not True and True
False
>>> not (True and False)
True
Alle boolean operators haben eine niedrigere Priorität als Pythons comparison operators, wie ==, >, <, is und is not.
Die Funktion bool (bool()) wandelt jedes Objekt in einen booleschen Wert um.
Standardmäßig geben alle Objekte True zurück, sofern sie nicht so definiert sind, dass sie False zurückgeben.
Einige built-ins gelten per Definition immer als False:
None und False
int, float, complex, decimal oder fraction)str, list, set, tuple, dict, range(0))>>> bool(None)
False
>>> bool(1)
True
>>> bool(0)
False
>>> bool([1,2,3])
True
>>> bool([])
False
>>> bool({"Pig" : 1, "Cow": 3})
True
>>> bool({})
False
Wenn ein Objekt in einem booleschen Kontext verwendet wird, wird es mit bool() transparent als truthy oder falsey ausgewertet:
>>> a = "is this true?"
>>> b = []
# This will print "True", as a non-empty string is considered a "truthy" value
>>> if a:
... print("True")
# This will print "False", as an empty list is considered a "falsey" value
>>> if not b:
... print("False")
Klassen können definieren, wie sie in truthy-Kontexten ausgewertet werden, wenn sie eine __bool__()-Methode und/oder eine __len__()-Methode überschreiben und implementieren.
Der Typ bool ist als Untertyp von int implementiert.
Das bedeutet, dass True numerisch gleich 1 und False numerisch gleich 0 ist.
Das lässt sich beobachten, wenn man sie mit einem Gleichheitsoperator vergleicht:
>>> 1 == True
True
>>> 0 == False
True
bools unterscheiden sich jedoch immer noch von ints, wie man beim Vergleich mit dem Identitätsoperator is sieht:
>>> 1 is True
False
>>> 0 is False
False
Hinweis: In Python >= 3.8 löst die Verwendung eines Literals (wie
1,'',[]oder{}) auf der linken Seite voniseine Warnung aus.
Es gilt als Python-Antipattern, den Gleichheitsoperator zu verwenden, um eine boolesche Variable mit True oder False zu vergleichen.
Stattdessen sollte der Identitätsoperator is verwendet werden:
>>> flag = True
# Not "Pythonic"
>>> if flag == True:
... print("This works, but it's not considered Pythonic.")
# A better way
>>> if flag:
... print("Pythonistas prefer this pattern as more Pythonic.")