Python Language Expressions booléennes


Exemple

Les expressions logiques booléennes, en plus d'évaluer True ou False , renvoient la valeur interprétée comme True ou False . C'est une manière pythonique de représenter une logique qui pourrait autrement nécessiter un test if-else.


Et opérateur

L'opérateur and évalue toutes les expressions et renvoie la dernière expression si toutes les expressions ont la valeur True . Sinon, il renvoie la première valeur évaluée à False :

>>> 1 and 2
2

>>> 1 and 0
0

>>> 1 and "Hello World"
"Hello World"

>>> "" and "Pancakes"
""

Ou opérateur

L'opérateur or évalue les expressions de gauche à droite et retourne la première valeur qui a la valeur True ou la dernière valeur (si aucune n'est True ).

>>> 1 or 2
1

>>> None or 1
1

>>> 0 or []
[]

Évaluation paresseuse

Lorsque vous utilisez cette approche, rappelez-vous que l'évaluation est paresseuse. Les expressions qui ne doivent pas être évaluées pour déterminer le résultat ne sont pas évaluées. Par exemple:

>>> def print_me():
        print('I am here!')
>>> 0 and print_me()
0

Dans l'exemple ci-dessus, print_me n'est jamais exécuté car Python peut déterminer que l'expression entière est False lorsqu'elle rencontre le 0 ( False ). Gardez cela à l'esprit si print_me doit être exécuté pour servir la logique de votre programme.


Test pour plusieurs conditions

Une erreur courante lors de la vérification de plusieurs conditions consiste à appliquer la logique de manière incorrecte.

Cet exemple essaie de vérifier si deux variables sont chacune supérieures à 2. L'instruction est évaluée comme suit - if (a) and (b > 2) . Cela produit un résultat inattendu car bool(a) évalué comme True lorsque a n'est pas nul.

>>> a = 1
>>> b = 6
>>> if a and b > 2:
...     print('yes')
... else:
...     print('no')
    
yes

Chaque variable doit être comparée séparément.

>>> if a > 2 and b > 2:
...     print('yes')
... else:
...     print('no')
        
no

Une autre erreur, similaire, est commise lors de la vérification d'une variable parmi plusieurs. L'énoncé dans cet exemple est évalué comme - if (a == 3) or (4) or (6) . Cela produit un résultat inattendu car bool(4) et bool(6) sont évalués à True

>>> a = 1
>>> if a == 3 or 4 or 6:
...     print('yes')
... else:
...     print('no')
       
yes

Encore une fois, chaque comparaison doit être faite séparément

>>> if a == 3 or a == 4 or a == 6:
...     print('yes')
... else:
...     print('no')
        
no

Utiliser l'opérateur in est la manière canonique d'écrire ceci.

>>> if a in (3, 4, 6):
...     print('yes')
... else:
...     print('no')
    
no