Priorité des opérateurs

4.4 Priorité des opérateurs

Objectifs d'apprentissage

À la fin de cette section, vous devriez être en mesure de :

  • Décrire l'impact de la priorité sur l'ordre des opérations.
  • Décrire l'impact de l'associativité sur l'ordre des opérations.
  • Expliquer l'utilité des parenthèses dans les expressions comportant plusieurs opérateurs.

Priorité

Lorsqu'une expression comporte plusieurs opérateurs, quel opérateur est évalué en premier ? Les règles de priorité déterminent le niveau de priorité des opérateurs. Les opérateurs ayant la priorité la plus élevée s'exécutent en premier. Ex. : 1 + 2 * 3 vaut 7 car la multiplication a la priorité sur l'addition. Cependant, (1 + 2) * 3 vaut 9 car les parenthèses ont la priorité sur la multiplication.

Opérateur Signification
() Parenthèses
** Exponentiation (associative à droite)
*, /, //, % Multiplication, division, division entière, modulo
+, - Addition, soustraction
<, <=, >, >=, ==, != Opérateurs de comparaison
not

Opérateur logique not

and

Opérateur logique and

or

Opérateur logique or

Tableau 4.4 Priorité des opérateurs, de la plus haute à la plus basse.

Faites le point

Priorité des opérateurs

Concepts en pratique

Règles de priorité

Quelle partie de chaque expression est évaluée en premier ?

1.
x ** 2 + 6 / 3
  1. 6 / 3
  2. x ** 2
  3. 2 + 6
2.
not 3 * 5 > 10
  1. 3 * 5
  2. not 3
  3. 5 > 10
3.
z == 5 and x / 8 < 100
  1. 5 and x
  2. x / 8
  3. 8 < 100

Associativité

Que se passe-t-il si des opérateurs adjacents ont le même niveau de priorité ? L'associativité détermine l'ordre des opérations lorsque la priorité est identique. Ex. : 8 / 4 * 3 est évalué comme (8/4) * 3 plutôt que 8 / (4*3) car la multiplication et la division sont associatives à gauche. La plupart des opérateurs sont associatifs à gauche et sont évalués de gauche à droite. L'exponentiation est l'exception principale (mentionnée ci-dessus) et est associative à droite : c'est-à-dire évaluée de droite à gauche. Ex. : 2 ** 3 ** 4 est évalué comme 2 ** (3**4).

Lorsque des opérateurs de comparaison sont enchaînés, l'expression est convertie en une combinaison équivalente de comparaisons et évaluée de gauche à droite. Ex. : 10 < x <= 20 est évalué comme 10 < x and x <= 20.

Faites le point

Priorité des opérations

Concepts en pratique

Associativité

Comment chaque expression est-elle évaluée ?

4.
10 + 3 * 2 / 4
  1. 10 + (3 * (2 / 4))
  2. 10 + ((3 * 2) / 4)
  3. (10 + 3) * (2 / 4)
5.
2 * 2 ** 2 ** 3
  1. 2 * ((2 ** 2) ** 3)
  2. 2 * (2 ** (2 ** 3))
  3. ((2*2) ** 2) ** 3
6.
100 < x > 150
  1. 100 < x and x < 150
  2. 100 < x or x > 150
  3. 100 < x and x > 150

Imposer l'ordre et la clarté à l'aide des parenthèses

Les règles de priorité des opérateurs peuvent être difficiles à mémoriser. Les parenthèses permettent non seulement d'imposer un ordre d'évaluation différent, mais aussi de réduire la confusion.

Faites le point

Utiliser les parenthèses

Concepts en pratique

Utilisation des parenthèses

7.
Considérez l'exemple ci-dessus. Pourquoi l'ordre d'évaluation était-il différent de ce que le programmeur souhaitait ?
  1. L'égalité a la priorité sur and.
  2. Tous les opérateurs sont évalués de droite à gauche.
  3. L'ordre est aléatoire lorsque les parenthèses ne sont pas utilisées.
8.
Étant donné x = 8 et y = 9, quel est le résultat de l'expression suivante ?
x + 3 * y - 5
  1. 30
  2. 44
  3. 94
9.
Étant donné x = 8 et y = 9, quel est le résultat de l'expression suivante ?
(x+3) * (y-5)
  1. 30
  2. 44
  3. 94

Recommandations de la PEP 8 : espaces autour des opérateurs

Le guide de style PEP 8 recommande un espacement cohérent autour des opérateurs afin d'éviter les espaces superflus et source de confusion.

  • Évitez les espaces multiples et un nombre inégal d'espaces autour des opérateurs à deux opérandes.
    À éviter : x= y * 44
    Préférable : x = y * 44
  • Évitez les espaces juste à l'intérieur des parenthèses.
    À éviter : x = ( 4 * y )
    Préférable : x = (4 * y)
  • Entourez les opérateurs d'affectation, d'affectation augmentée, de comparaison et les opérateurs booléens d'un espace.
    À éviter : x= y<44
    Préférable : x = y < 44
  • Envisagez d'ajouter des espaces autour des opérateurs de priorité inférieure.
    À éviter : x = 5 * z+20
    Préférable : x = 5*z + 20