Python fournit des opérateurs booléens, and, or, not. Par exemple, ils sont utilisés pour gérer plusieurs conditions dans l’instruction if.
Cet article décrit le contenu suivant.
- et (conjonction logique)
- ou (disjonction logique)
- non (négation)
- Priorité des opérateurs and, or, not
- Opérations booléennes pour les objets qui ne sont pas de type booléen
- et, ou ne renvoie PAS toujours le type booléen
- Évaluation des courts-circuits
Consultez l’article suivant pour les opérations au niveau du bit sur chaque bit d’un entier au lieu des opérations booléennes de True et False. Utilisez & et | au lieu de et et ou.
Voir l’article suivant pour l’instruction if.
et (conjonction logique)
et renvoie la conjonction logique de deux valeurs.
print(True and True)
# True
print(True and False)
# False
print(False and True)
# False
print(False and False)
# False
En pratique, il est souvent utilisé pour les expressions conditionnelles avec des opérateurs de comparaison (<, >, etc.) plutôt que pour Vrai, Faux. Il en va de même pour ou et non décrit plus loin.
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
Les comparaisons multiples peuvent être enchaînées comme suit.
print(0 < a < 100)
# True
ou (disjonction logique)
ou renvoie la disjonction logique de deux valeurs.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
non (négation)
not renvoie la négation de la valeur. Vrai et faux sont inversés.
print(not True)
# False
print(not False)
# True
Priorité des opérateurs and, or, not
La priorité des opérateurs booléens n’est pas > et > ou (pas est la priorité la plus élevée).
Dans l’exemple de code ci-dessous, la première expression est considérée comme la seconde.
Peu importe s’il y a des parenthèses supplémentaires (), donc dans des cas comme cet exemple, les parenthèses peuvent faciliter la compréhension de la signification de l’expression.
print(True or True and False)
# True
print(True or (True and False))
# True
Si vous voulez calculer ou avant et, utilisez des parenthèses () pour ou.
print((True or True) and False)
# False
Les opérateurs de comparaison tels que <, > ont une priorité plus élevée que non, et, ou, donc les parenthèses () ne sont pas nécessaires pour chaque comparaison, comme dans l’exemple ci-dessus.
print(0 < a and a < 100)
# True
Voir la documentation officielle ci-dessous pour un résumé de la priorité des opérateurs en Python.
Opérations booléennes pour les objets qui ne sont pas de type booléen
Les opérateurs booléens and, or, not gèrent non seulement le type booléen (True, False) mais aussi les nombres, les chaînes, les listes, etc.
En Python, les objets suivants sont considérés comme faux dans les opérations booléennes.
- constantes définies comme fausses :
None and False
- zéro de n’importe quel type numérique :
0, 0.0, 0j, Decimal(0), Fraction(0, 1)
- séquences et collections vides :
'', (), [], {}, set(), range(0)
Tout le reste est considéré comme vrai.
Vous pouvez obtenir la valeur booléenne d’un objet avec la fonction bool(). Notez que les chaînes ‘0’ et ‘False’ sont considérées comme vraies.
print(bool(10))
# True
print(bool(0))
# False
print(bool(''))
# False
print(bool('0'))
# True
print(bool('False'))
# True
print(bool([]))
# False
print(bool([False]))
# True
Utilisez distutils.util.strtobool() pour traiter les chaînes ‘0’ et ‘False’ comme fausses. Voir l’article suivant.
et, ou ne renvoie PAS toujours le type booléen
et, ou, et non pour les entiers :
x = 10 # True
y = 0 # False
print(x and y)
# 0
print(x or y)
# 10
print(not x)
# False
Comme vous pouvez le voir dans l’exemple ci-dessus, en Python, and and or ne renvoie pas bool (True,False), mais renvoie les valeurs gauche ou droite. ne renvoie pas booléen (True, False).
Il en va de même pour les autres types tels que les chaînes, les listes, etc.
Les définitions des valeurs de retour de et et ou sont les suivantes.
L’expression x et y évalue d’abord x ; si x est faux, sa valeur est retournée ; sinon, y est évalué et la valeur résultante est renvoyée.
L’expression x ou y évalue d’abord x ; si x est vrai, sa valeur est renvoyée ; sinon, y est évalué et la valeur résultante est renvoyée.
6. Expressions — documentation Python 3.9.1
Si les valeurs à gauche et à droite sont true et false, la valeur de retour est facile à comprendre, mais si les deux sont true ou les deux sont false, la valeur de retour diffère selon l’ordre.
Lorsque vous l’utilisez comme expression conditionnelle dans une instruction if, le résultat est testé comme une valeur booléenne, il n’y a donc pas lieu de s’en soucier, mais soyez prudent lorsque vous utilisez la valeur de retour dans les opérations suivantes.
x = 10 # True
y = 100 # True
print(x and y)
# 100
print(y and x)
# 10
print(x or y)
# 10
print(y or x)
# 100
x = 0 # False
y = 0.0 # False
print(x and y)
# 0
print(y and x)
# 0.0
print(x or y)
# 0.0
print(y or x)
# 0
print(bool(x and y))
# False
Si vous souhaitez recevoir le résultat sous la forme True ou False, utilisez bool() comme dans le dernier exemple.
Les valeurs de retour de et et ou sont résumées dans le tableau ci-dessous.
X | Oui | x et y | x ou y |
---|---|---|---|
vrai | faux | Oui | X |
faux | vrai | X | Oui |
vrai | vrai | Oui | X |
faux | faux | X | Oui |
Évaluation des courts-circuits
Comme vous pouvez le voir dans le tableau ci-dessus, si x est faux dans x et y ou si x est vrai dans x ou y, la valeur de retour est toujours x. Dans de tels cas, y n’est pas évalué.
Notez que si vous appelez une fonction ou une méthode sur le côté droit de et et ou, elles peuvent ne pas être exécutées en fonction du résultat sur le côté gauche.
def test():
print('function is called')
return True
print(True and test())
# function is called
# True
print(False and test())
# False
print(True or test())
# True
print(False or test())
# function is called
# True