Les booléens en python sont des sous-classes des entiers. Le constructeur des booléens est bool
. la classe bool hérite de la classe int.
issubclass(bool,int) // will return True
isinstance(True,bool) , isinstance(False,bool) //they both True
True
y False
sont des objets singleton. Ils conserveront la même adresse mémoire pendant toute la durée de vie de votre application. Lorsque vous tapez True
le gestionnaire de mémoire de python vérifiera son adresse et en tirera la valeur '1'. pour False
sa valeur est "0".
Comparaisons de toute expression booléenne avec True
o False
peut être effectuée en utilisant soit is
(identité) ou ==
(égalité).
int(True) == 1
int(False) == 0
Mais notez que True
et '1' ne sont pas les mêmes objets. Vous pouvez vérifier :
id(True) == id(1) // will return False
vous pouvez aussi facilement voir que
True > False // returns true cause 1>0
toute opération sur les entiers peut fonctionner avec les booléens.
True + True + True =3
Tous les objets en python ont une valeur de vérité associée. Chaque objet a True
sauf la valeur :
-
Aucun
-
Faux
-
0 dans n'importe quel type numérique (0,0.0,0+0j etc)
-
séquences vides (liste, tuple, chaîne)
-
types de mappage vides (dictionnaire, ensemble, etc.)
-
des classes personnalisées qui mettent en œuvre __bool__
o __len__
qui renvoie False
o 0
.
chaque classe en python a des valeurs de vérité définies par une méthode d'instance spéciale :
__bool__(self) OR
__len__
Lorsque vous appelez bool(x)
python exécutera effectivement
x.__bool__()
si l'instance x
ne possède pas cette méthode, alors il exécutera
x.__len__()
si celle-ci n'existe pas, la valeur par défaut est True
.
Par exemple, pour int
nous pouvons définir bool comme ci-dessous :
def __bool__(self):
return self != 0
pour bool(100), 100 !=0
retournera True
. Donc
bool(100) == True
vous pouvez facilement vérifier que bool(0)
sera False
. avec ceci, pour les instances de la classe int, seul 0 renverra Faux.
autre exemple= bool([1,2,3])
[1,2,3]
n'a pas __bool__()
définie, mais elle a __len__()
et puisque sa longueur est supérieure à 0, il retournera True
. Maintenant vous pouvez voir pourquoi les listes vides retournent False
.