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 ?
Réponses
Trop de publicités?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...}
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
.
not
se lie plus étroitement que and
qui se lie plus étroitement que or
comme indiqué dans le référence linguistique
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
- Réponses précédentes
- Plus de réponses