Aller au contenu principal

Conditions et expressions booléennes

Une chaîne if/elif/else évalue les conditions dans l'ordre et exécute la première branche vraie.

if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
else:
grade = "C or below"

L'ordre compte lorsque les conditions se chevauchent.

Valeurs de vérité

None, False, le zéro numérique et les conteneurs vides sont faux par défaut. La plupart des autres objets sont vrais ; les classes définies par l'utilisateur peuvent personnaliser ce test.

Employez une comparaison explicite lorsque vide, zéro et absent ont des sens différents :

if records is None:
load_records()
elif not records:
report_empty_dataset()

Comparaisons

  • == et != comparent les valeurs.
  • is et is not comparent l'identité.
  • in et not in testent l'appartenance.
  • Les comparaisons ordonnées peuvent s'enchaîner : lower <= value < upper.

N'utilisez pas is pour comparer la valeur de nombres ou de chaînes ; la réutilisation d'objets par l'interpréteur n'est pas une garantie sémantique.

Opérateurs à court-circuit

and et or s'évaluent de gauche à droite et renvoient l'un de leurs opérandes, pas nécessairement un bool :

display_name = supplied_name or "anonymous"
safe_ratio = denominator and numerator / denominator

La seconde expression n'est évaluée qu'en cas de besoin. Cette propriété sert de garde, mais évitez les expressions compactes dont les types de retour mélangés masquent le contrat.

Conception des branches

  • Traitez tôt les cas invalides ou exceptionnels pour réduire l'imbrication.
  • Extrayez un prédicat nommé lorsqu'une condition encode une logique métier.
  • Utilisez une table de correspondance ou le polymorphisme lorsqu'une grande branche sélectionne un comportement par clé stable.
  • Employez match pour les motifs structurels, sans en faire le remplacement obligatoire de toute chaîne d'égalités simple.

Limites des expressions

La référence des expressions place les comparaisons avant not, puis and, puis or dans l'ordre de priorité. Des parenthèses clarifient une condition mixte. not renvoie toujours un booléen, et une comparaison en chaîne n'évalue son expression centrale qu'une seule fois.

assert not "" # chaîne vide
assert bool("0") and bool("False") # deux chaînes non vides
assert (0 or 7) == 7
assert (0 and 7) == 0
assert (2 < 3 < 4) is True
value = 0
result = value if value is not None else 10
assert result == 0

Écrivez x == "a" or x == "b", ou x in {"a", "b"} ; x == "a" or "b" est toujours vrai au sens du test de vérité, car "b" n'est pas vide. L'expression conditionnelle yes if condition else no n'évalue que le résultat choisi. value or default remplacerait aussi un zéro valide, et pas seulement None. Des if indépendants peuvent exécuter plusieurs corps ; une chaîne if/elif en sélectionne au plus un. Son else, facultatif, traite le cas où aucune condition ne réussit.

Sources

Explorer les liensOuvrir le réseau