Python représente les valeurs vrai et faux avec le type bool, qui est une sous-classe de int. Ce type ne comporte que deux valeurs booléennes : True et False. Ces valeurs peuvent être affectées à une variable et combinées avec les opérateurs booléens (and, or, not) :
>>> 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
Les opérateurs booléens utilisent l'évaluation par court-circuit, ce qui signifie que l'expression à droite de l'opérateur n'est évaluée que si c'est nécessaire.
Chaque opérateur a une priorité différente : not est évalué avant and et or. Les parenthèses permettent d'évaluer une partie de l'expression avant les autres :
>>> not True and True
False
>>> not (True and False)
True
Tous les boolean operators sont considérés comme ayant une priorité inférieure à celle des comparison operators de Python, comme ==, >, <, is et is not.
La fonction bool (bool()) convertit n'importe quel objet en une valeur booléenne. Par défaut, tous les objets renvoient True, sauf s'ils sont définis pour renvoyer False.
Quelques built-ins sont toujours considérés comme False par définition :
None et False
int, float, complex, decimal ou 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
Lorsqu'un objet est utilisé dans un contexte booléen, il est évalué de façon transparente comme truthy ou falsey avec bool() :
>>> 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")
Une classe peut définir la façon dont elle est évaluée dans des situations truthy si elle redéfinit et implémente une méthode __bool__(), et/ou une méthode __len__().
Le type bool est implémenté comme un sous-type de int. Cela signifie que True est numériquement égal à 1 et que False est numériquement égal à 0. On peut le constater en les comparant avec un opérateur d'égalité :
>>> 1 == True
True
>>> 0 == False
True
Cependant, les bools sont toujours différents des ints, comme on le constate en les comparant avec l'opérateur d'identité, is :
>>> 1 is True
False
>>> 0 is False
False
Remarque : dans Python >= 3.8, utiliser un littéral (comme
1,'',[]ou{}) du côté gauche deisdéclenche un avertissement.
Utiliser l'opérateur d'égalité pour comparer une variable booléenne à True ou False est considéré comme un anti-patron Python. Il faut plutôt utiliser l'opérateur d'identité is :
>>> 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.")