https://docs.python.org/3/library/constants.html
https://docs.python.org/3/library/functions.html#bool
Typ logiczny 'bool' to dwie stałe: 'True' (dawniej równe 1) i 'False' (dawniej równe 0). 'True' i 'False' pojawiły się w Py2.3. Jednak ogólnie w Pythonie jako fausz logiczny traktuje się:
Wszystko inne jest prawdą logiczną.
Operatory 'and' i 'or' zwracają wartość ostatnio obliczonego wyrażenia.
Wartości logiczne zwracane przez operatory porównania, operator zawierania ('in') oraz operator negacji ('not') reprezentowane są przez obiekty 'True' i 'False'.
Operatory porównania można łączyć tak jak w zapisie matematycznym.
Priorytety operatorów od najwyższego: not, and, or.
Przykładowo (A or not B and C)
jest równoważne (A or ((not B) and C)).
Dla pewności można jednak stosować nawiasy.
Wyrażenia logiczne są obliczane od lewej do prawej (tak jak w języku C), czyli jeżeli wiadomo jaki będzie rezultat, to nie są sprawdzane do końca wszystkie segmenty wyrażenia, np.
Trzeba pamiętać, że wyrażenie Anything może być samo w sobie niepoprawne, np. odwołanie się poza obszar listy.
Operatory porównań: a < b, a <= b, a > b, a >= b, a == b, a <> b [Py2], a != b.
Testy identyczności: a is b [id(a) == id(b)], a is not b [id(a) != id(b)]. Operatory 'is' i 'is not' mogą być stosowane do dowolnych obiektów i nigdy nie wywołują wyjątków.
Zawieranie się w sekwencji lub kolekcji: a in S, a not in S. Te operacje są wspierane dla typów, które są iterowalne lub mają zaimplementowaną metodę '__contains__()'.
Sekwencje w Pythonie są porównywane leksykograficznie. Dozwolone jest porównywanie obiektów różnych typów (tylko Py2), ale rezultaty mogą zależeć od wersji języka.
Dokumentacja Pythona określa osiem operacji porównywania:
a < b, a <= b, a > b, a >= b, a == b, a != b, a is b, a is not b.
Operacje porównywania mogą być dowolnie łączone w łańcuchy:
(a < b <= c) oznacza (a < b) and (b <= c),
ale b będzie obliczone tylko raz;
(a is b is c is d) oznacza (a is b) and (b is c) and (c is d).