Python fournit des opérateurs logiques pour effectuer des opérations logiques (booléennes).(and
,or
,not
)
Il est utilisé pour décrire la relation entre plusieurs conditions dans une instruction if.
Cette section décrit les éléments suivants.
- intersection:
and
- ajout logique:
or
- déni:
not
and
,or
,not
Préséance des opérateurs
En outre, les points suivants sont expliqués à titre d'avertissement.
- Opérateurs logiques pour les objets de type autre que bool
and
,or
Ces valeurs de retour ne sont pas nécessairement de type bool.- Court-circuit (évaluation du court-circuit)
intersection: and
et renvoie le produit 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 fait, il est souvent utilisé non pas pour le vrai ou le faux, mais pour des expressions conditionnelles utilisant des opérateurs de comparaison. Pour votre information, les opérateurs de comparaison sont les suivants.
<
>
a = 10
print(0 < a)
# True
print(a < 100)
# True
print(0 < a and a < 100)
# True
et peuvent être concaténés comme suit.
print(0 < a < 100)
# True
ajout logique: or
ou renvoie le OU logique des deux valeurs.
print(True or True)
# True
print(True or False)
# True
print(False or True)
# True
print(False or False)
# False
déni: not
not” renvoie la négation de la valeur ; vrai et faux sont inversés.
print(not True)
# False
print(not False)
# True
and,or,notPréséance des opérateurs
L'ordre de préséance de ces opérateurs logiques est le suivant : not est le plus élevé.
not
and
or
Dans l'exemple de code suivant, l'expression ci-dessus est interprétée comme s'il s'agissait de celle ci-dessous. Puisque les parenthèses supplémentaires ne posent aucun problème, il peut être plus facile de les décrire clairement dans des cas comme cet exemple.
print(True or True and False)
# True
print(True or (True and False))
# True
Si vous voulez faire fonctionner ou avant et, utilisez les parenthèses().
print((True or True) and False)
# False
<
,>
Ces opérateurs de comparaison ont une priorité encore plus élevée que les autres. Par conséquent, les parenthèses ne sont pas nécessaires pour chaque opération de comparaison, comme c'était le cas dans l'exemple ci-dessus.
print(0 < a and a < 100)
# True
Consultez la documentation officielle ci-dessous pour un résumé de la précédence des opérateurs en Python.
Opérateurs logiques pour les objets de type autre que bool
Avec ces opérateurs logiques, non seulement les types bool (true, false), mais aussi les nombres, les chaînes de caractères, les listes, etc. sont traités comme des valeurs booléennes.
Les objets suivants sont considérés comme faux dans les opérations logiques de Python.
- Constantes définies comme étant fausses:
None
,false
- Zéro dans les types numériques:
0
,0
,0j
,Decimal(0)
,Fraction(0, 1)
- Séquence ou collection vide:
''
,()
,[]
,{}
,set()
,range(0)
Toutes les autres valeurs sont considérées comme vraies.
La fonction bool() peut être utilisée pour obtenir la valeur booléenne d'un objet. Notez que la chaîne '0' ou 'False' est considérée comme vraie.
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
Pour traiter '0' ou 'false' dans une chaîne comme faux, utilisez distutils.util.strtobool().
and,orCes valeurs de retour ne sont pas nécessairement de type bool.
Voici un exemple d'un objet autre qu'un type bool, montrant le résultat de chaque opérateur sur une valeur numérique.
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, and et or en Python ne renvoient pas true ou false du type bool, mais renvoient la valeur à gauche ou à droite selon qu'elle est vraie ou fausse. L'exemple est numérique, mais la même chose s'applique à d'autres types tels que les chaînes de caractères et les listes. Par ailleurs, not renvoie true ou false pour le type bool.
Les définitions des valeurs de retour de and et or sont les suivantes.
The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.
The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.
6.11. Boolean operations — Expressions — Python 3.10.1 Documentation
Lorsque les valeurs des expressions de gauche et de droite sont vraies et fausses séparément, les valeurs de retour sont faciles à comprendre. En revanche, si les deux sont vrais ou faux, la valeur de retour sera différente selon l'ordre.
Si vous l'utilisez comme une expression conditionnelle dans une instruction if, etc., le résultat est considéré comme une valeur booléenne et traité, vous n'avez donc pas à vous en soucier, mais si vous utilisez la valeur de retour pour un traitement ultérieur, vous devez faire attention.
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 voulez le traiter comme vrai ou faux, vous pouvez faire comme dans le dernier exemple.bool(x and y)
Les valeurs de retour de et et ou sont résumées dans le tableau ci-dessous.
x | y | x and y | x or y |
---|---|---|---|
true | false | y | x |
false | true | x | y |
true | true | y | x |
false | false | x | y |
Court-circuit (évaluation du court-circuit)
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 sera x quelle que soit la valeur de y.
Dans ce cas, y n'est pas évalué.
and
,or
Notez que si vous appelez une fonction ou une méthode sur le côté droit de ces processus pour effectuer un traitement, le processus peut ne pas être exécuté 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