128 votes

Priorité des opérateurs logiques NOT, AND, OR en Python

Pour autant que je sache, en C & C++, la séquence de priorité pour NOT AND & OR est NOT>AND>OR. Mais cela ne semble pas fonctionner de manière similaire en Python. J'ai essayé de la chercher dans la documentation de Python et j'ai échoué (je suppose que je suis un peu impatient.). Quelqu'un peut-il m'éclairer sur ce point ?

154voto

Kyle Heuton Points 4885

C'est NOT, AND, OR, du plus élevé au plus bas selon la documentation sur Préséance des opérateurs

Voici le tableau de préséance complet, de la préséance la plus basse à la plus haute. Une ligne a la même préséance et s'enchaîne de gauche à droite

 0. :=
 1. lambda
 2. if – else
 3. or
 4. and
 5. not x
 6. in, not in, is, is not, <, <=, >, >=, !=, ==
 7. |
 8. ^
 9. &
 10. <<, >>
 11. +, -
 12. *, @, /, //, %
 13. +x, -x, ~x
 14. **
 14. await x
 15. x[index], x[index:index], x(arguments...), x.attribute
 16. (expressions...), [expressions...], {key: value...}, {expressions...}

47voto

nos Points 1337

Vous pouvez effectuer le test suivant pour déterminer la préséance des éléments suivants and y or .

D'abord, essayez 0 and 0 or 1 dans la console python

Si or se lie en premier, alors on s'attend à ce que 0 comme sortie.

Dans ma console, 1 est la sortie. Elle signifie and soit se lie en premier, soit est égal à or (les expressions peut-être sont évaluées de gauche à droite).

Essayez alors 1 or 0 and 0 .

Si or y and se lient également avec l'ordre d'évaluation intégré de gauche à droite, alors nous devrions obtenir 0 comme sortie.

Dans ma console, 1 est la sortie. Nous pouvons alors conclure que and a une priorité plus élevée que or .

23voto

mgilson Points 92954

not se lie plus étroitement que and qui se lie plus étroitement que or comme indiqué dans le référence linguistique

7voto

Oswald Wirt Points 61

Parmi les opérateurs booléens, la préséance, 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 préséance, l'évaluation se fait de gauche à droite.

7voto

Victoria Stuart Points 21

Quelques exemples simples ; notez la précédence des opérateurs (pas, et, ou) ; mettez entre parenthèses pour faciliter l'interprétation humaine.

a = 'apple'
b = 'banana'
c = 'carrots'

if c == 'carrots' and a == 'apple' and b == 'BELGIUM':
    print('True')
else:
    print('False')
# False

De même :

if b == 'banana'
True

if c == 'CANADA' and a == 'apple'
False

if c == 'CANADA' or a == 'apple'
True

if c == 'carrots' and a == 'apple' or b == 'BELGIUM'
True

# Note this one, which might surprise you:
if c == 'CANADA' and a == 'apple' or b == 'banana'
True

# ... it is the same as:
if (c == 'CANADA' and a == 'apple') or b == 'banana':
True

if c == 'CANADA' and (a == 'apple' or b == 'banana'):
False

if c == 'CANADA' and a == 'apple' or b == 'BELGIUM'
False

if c == 'CANADA' or a == 'apple' and b == 'banana'
True

if c == 'CANADA' or (a == 'apple' and b == 'banana')
True

if (c == 'carrots' and a == 'apple') or b == 'BELGIUM'
True

if c == 'carrots' and (a == 'apple' or b == 'BELGIUM')
True

if a == 'apple' and b == 'banana' or c == 'CANADA'
True

if (a == 'apple' and b == 'banana') or c == 'CANADA'
True

if a == 'apple' and (b == 'banana' or c == 'CANADA')
True

if a == 'apple' and (b == 'banana' and c == 'CANADA')
False

if a == 'apple' or (b == 'banana' and c == 'CANADA')
True

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X