Programmation Python/Tableau des opérateurs

Priorité des opérations

modifier

Lorsqu'il y a plus d'un opérateur dans une expression, l'ordre dans lequel les opérations doivent être effectuées dépend de règles de priorité. Sous Python, les règles de priorité sont les mêmes que celles qui vous ont été enseignées au cours de mathématique. Vous pouvez les mémoriser aisément à l'aide d'un « truc » mnémotechnique, l'acronyme PEMDAS :

  • P pour parenthèses. Ce sont elles qui ont la plus haute priorité. Elles vous permettent donc de « forcer » l'évaluation d'une expression dans l'ordre que vous voulez.
    Ainsi 2*(3-1) = 4, et (1+1)**(5-2) = 8.
  • E pour exposants. Les exposants sont évalués ensuite, avant les autres opérations.
    Ainsi 2**1+1 = 3 (et non 4), et 3*1**10 = 3 (et non 59049 !).
  • M et D pour multiplication et division, qui ont la même priorité. Elles sont évaluées avant l'addition A et la soustraction S, lesquelles sont donc effectuées en dernier lieu.
    Ainsi 2-2*2 renvoie -2 et non 0 !Et 2+4/2 renvoie 4.0 et non 3.0 (Rappelez-vous que / est l'opérateur de la division décimale).
    Si deux opérateurs ont la même priorité, l'évaluation est effectuée de gauche à droite.
    Ainsi dans l'expression 59*100/60, la multiplication est effectuée en premier, et la machine doit donc ensuite effectuer 5900/60, ce qui donne 98.0.
  • A et S pour addition et soustraction.

Dans le tableau ci-dessous :

  • les opérateurs regroupés entre deux lignes épaisses ont la même priorité.
  • le sens d'évaluation indique l'ordre d'évaluation des opérations dans une expression :
    • → pour une évaluation de gauche à droite : a OP1 b OP2 c == (a OP1 b) OP2 c ;
    • ← pour une évaluation de droite à gauche : a OP1 b OP2 c == a OP1 (b OP2 c).
  • le type peut être :
    • « groupe » pour un couple de caractères encadrant une ou plusieurs expressions,
    • « binaire » pour un opérateur situé entre ses deux opérandes,
    • « ternaire » pour un opérateur utilisant trois opérandes,
    • « unaire » pour un opérateur précédant son unique opérande.
Précédence des opérateurs du plus au moins prioritaire[1]
Symbole Type Évaluation Nom
{} Groupe Agencement de dictionnaire
() Groupe Agencement de n-uplet
[] Groupe Agencement de liste
. Binaire Attribut
() Groupe Argument de fonction
[] Groupe Partie (opérateur d'indiçage)
await Unaire Attente de résultat
** Binaire Puissance
~ Unaire inversion de bit
+ Unaire Positif
- Unaire Négatif
* Binaire Multiplier
@ Binaire Multiplication de matrices
/ Binaire Diviser
// Binaire Résultat entier d'une division
% Binaire Modulo
+ Binaire Addition
- Binaire Soustraction
<< Binaire Décalage à gauche
>> Binaire Décalage à droite
& Binaire et logique
^ Binaire ou exclusif
| Binaire ou logique
in Binaire Test d'appartenance
not in Binaire Test de non appartenance
is Binaire Test d'égalité type
is not Binaire Test de non égalité de type
< Binaire inférieur
> Binaire supérieur
<= Binaire inférieur ou égal
>= Binaire supérieur ou égal
== Binaire est égal
!= Binaire est différent
not Unaire non booléen
and Binaire et booléen
or Binaire ou booléen
if ... else ... Ternaire expression conditionnelle
lambda Binaire expression lambda

Références

modifier