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:
or
and
not x
is 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.