Depuis qu'ils sont fondamentalement équivalent, vous pourriez aussi envisager la manière dont vous lisez/penser le code:
if a == 5 and b == 5:
# do something
peut être lu comme "si a
équivaut 5
et b
équivaut 5
, puis de le faire ...". Vous devez penser/conclure, que puis aussi a
sera égal à b
.
C'est l'opposé de l'exemple suivant:
if a == b and b == 5:
# do something
Ce lit que "si a
est égal à b
et b
égal à 5
" et vous avez à conclure que puis aussi a
sera égal à 5
C'est pourquoi je préfère la dernier exemple:
if a == b == 5:
# do something
Si vous êtes familier avec Python (grâce à Itzkata), il est immédiatement clair que tous les trois choses doivent être égaux (à l' 5
). Si toutefois, les personnes ayant moins d'expérience en Python (mais la programmation des compétences dans d'autres langues) voir cela, ils peuvent évaluer ce à
if (a == b) == 5:
ce qui permettrait de comparer le résultat booléen de la première comparaison avec l'entier 5, ce qui n'est pas ce que Python ne et pourrait conduire à des résultats différents (par exemple avec a=0, b=0
: a==b==0
est vraie alors (a==b) == 0
ne l'est pas!
Le manuel dit:
Il y a huit opérations de comparaison en Python. Ils ont tous les
de même priorité (ce qui est plus élevé que celui des opérations Booléennes).
Des comparaisons peuvent être enchaînées de façon arbitraire; par exemple, x < y <= z est
équivalent à x < y et y <= z, sauf que y est évaluée qu'une seule fois
(mais dans les deux cas, z n'est pas évalué si x < y est trouvé être
false).
Il pourrait même y avoir une différence, par exemple si evaulating b
dans votre exemple, serait un effet secondaire.
Concernant la transitivité, vous avez raison.