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?

45
demandé sur Akshar Gupta 2013-05-22 00:50:47

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

  1. lambda
  2. if-else
  3. ou
  4. et
  5. x
  6. dans, pas, est, n'est pas, <, <=, >, >=, !=, = =
  7. /
  8. ^
  9. &
  10. <<, >>
  11. +, -
  12. *, /, //, %
  13. +x, - x, ~x
  14. ***
  15. x[index], x[index: index], x (arguments...),. x.l'attribut
  16. (expressions...), [expression...], {clé: valeur...}, {expression...}

EDIT: A la mauvaise priorité

56
répondu Kyle Heuton 2017-06-17 07:58:41

not lies Tight thanand qui se lie plus serré que or comme indiqué dans le référence de langue

16
répondu mgilson 2013-05-21 20:52:30

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.

9
répondu nos 2017-08-29 16:25:49

Des opérateurs booléens, la priorité, de la plus faible à la plus forte, est comme suit:

  1. or
  2. and
  3. not x
  4. is not;not in

lorsque les opérateurs sont de priorité égale, l'évaluation se fait de gauche à droite.

4
répondu Oswald Wirt 2015-07-24 05:20:05

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.

1
répondu MarianD 2017-08-23 15:16:53