web-dev-qa-db-fra.com

Priorité des instructions logiques NOT AND & OR dans python

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?

61
Akshar Gupta

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

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

EDIT: eu le mauvais précédent

69
Kyle Heuton

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.

18
nos

not se lie plus que and qui se resserre que or comme indiqué dans le référence du langage

17
mgilson

Parmi les opérateurs booléens, la priorité, du plus faible au plus fort, est la suivante:

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

Lorsque les opérateurs ont la même priorité, l'évaluation se déroule de gauche à droite.

4
Oswald Wirt

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.

2
MarianD