Autant que je sache, en C & C++, la séquence de priorité de NOT AND & OR n'est PAS> AND> OR. Mais cela ne semble pas fonctionner de manière similaire en Python. J'ai essayé de le rechercher dans la Python et j'ai échoué (devinez que je suis un peu impatient.). Quelqu'un peut-il m'éclaircir?
Ce n'est pas, ET, OU, du plus haut au plus bas selon la documentation https://docs.python.org/3/reference/expressions.html#operator-precedence
Voici le tableau de préséance complet, du plus bas au plus élevé. Une rangée a la même priorité et les chaînes de gauche à droite
EDIT: eu le mauvais précédent
Vous pouvez effectuer le test suivant pour déterminer la priorité de and
et or
.
Premier essai 0 and 0 or 1
in python console
Si or
se lie en premier, alors nous nous attendrions à 0
en sortie.
Dans ma console, 1
est la sortie. Cela signifie que and
se lie d’abord ou est égal à or
(peut-être que les expressions sont évaluées de gauche à droite).
Alors essaye 1 or 0 and 0
.
Si or
et and
se lient également avec l'ordre d'évaluation intégré de gauche à droite, alors nous devrions obtenir 0
en sortie.
Dans ma console, 1
est la sortie. Ensuite, nous pouvons conclure que and
a une priorité supérieure à or
.
not
se lie plus que and
qui se resserre que or
comme indiqué dans le référence du langage
Parmi les opérateurs booléens, la priorité, du plus faible au plus fort, est la suivante:
or
and
not x
is not
; not in
Lorsque les opérateurs ont la même priorité, l'évaluation se déroule de gauche à droite.
Il n'y a aucune bonne raison pour Python avoir autre séquence de priorité de ces opérateurs que bien établie dans (presque) tous les autres langages de programmation, y compris C/C++.
Vous pouvez le trouver dans Python Référence du langage , partie 6.16 - Priorité des opérateurs, téléchargeable (pour la version actuelle et emballé avec toute autre documentation standard) de https://docs.python.org/3/download.html , ou lisez-le en ligne ici: 6.16. Priorité des opérateurs .
Mais il y a encore quelque chose dans Python qui peut vous induire en erreur: Le résultat de and
et or
les opérateurs peuvent être différents de True
ou False
- voir 6.11 Opérations booléennes dans le même document.