Priorité des énoncés logiques NOT et & ou en python
autant que je sache, en C & C++, la séquence de priorité pour NOT et & OR n'est pas>et>OR. Mais cela ne semble pas fonctionner de manière similaire en Python. J'ai essayé de le chercher dans la documentation de Python et j'ai échoué (je suppose que je suis un peu impatient.). Quelqu'un peut-il éclaircir ce point pour moi?
5 réponses
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 complet de la préséance, de la préséance la plus basse à la plus haute. Une rangée a la même priorité et des chaînes de gauche à droite
- lambda
- if-else
- ou
- et
- x
- dans, pas, est, n'est pas, <, <=, >, >=, !=, = =
- /
- ^
- &
- <<, >>
- +, -
- *, /, //, %
- +x, - x, ~x
- ***
- x[index], x[index: index], x (arguments...),. x.l'attribut
- (expressions...), [expression...], {clé: valeur...}, {expression...}
EDIT: A la mauvaise priorité
not lies Tight thanand qui se lie plus serré que or comme indiqué dans le référence de langue
vous pouvez faire le test suivant pour déterminer la priorité de and et or.
tout d'Abord, essayez 0 and 0 or 1 en console python
Si or se lie d'abord, puis nous nous attendons à ce 0 en tant que sortie.
Dans ma console, 1 est la sortie. Il signifie and se lie d'abord ou égale à or (peut-être les expressions sont évaluées de gauche à droite).
Ensuite, essayez 1 or 0 and 0.
Si or et and bind de même que l'ordre d'évaluation de gauche à droite intégré, nous devrions obtenir 0 en tant que sortie.
Dans ma console, 1 est la sortie. Ensuite, nous pouvons conclure que and a priorité plus élevée que or.
Des opérateurs booléens, la priorité, de la plus faible à la plus forte, est comme suit:
orandnot xis not;not in
lorsque les opérateurs sont de priorité égale, l'évaluation se fait de gauche à droite.
Il y a pas de bonne raison pour Python d'avoir autres ordre de priorité de ces opérateurs que bien établi dans (presque) tous les autres langages de programmation, y compris C/C++.
Vous pouvez le trouver dans La Référence Au Langage Python partie 6.16 - la priorité de l'Opérateur, téléchargeable (pour la version actuelle et emballé avec tous les autres documents standard) à partir de https://docs.python.org/3/download.html, ou le lire en ligne ici: 6.16. Opérateur priorité.
mais il y a encore quelque chose en Python qui peut vous induire en erreur: le résultatand et or les opérateurs peuvent être True ou False -6.11 opérations Booléennes dans le même document.