Programmation Python/Tableau des opérateurs
Priorité des opérations
modifierLorsqu'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.
Ainsi2*(3-1) = 4
, et(1+1)**(5-2) = 8
.
E
pour exposants. Les exposants sont évalués ensuite, avant les autres opérations.
Ainsi2**1+1 = 3
(et non 4), et3*1**10 = 3
(et non 59049 !).
M
etD
pour multiplication et division, qui ont la même priorité. Elles sont évaluées avant l'additionA
et la soustractionS
, lesquelles sont donc effectuées en dernier lieu.
Ainsi2-2*2 renvoie -2 et non 0 !
Et2+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'expression59*100/60
, la multiplication est effectuée en premier, et la machine doit donc ensuite effectuer5900/60
, ce qui donne98.0
.
A
etS
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.
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 |