Priorité et associativité des opérateurs en Python

Dans ce didacticiel, vous apprendrez comment la priorité et l'associativité des opérateurs affectent l'ordre des opérations en Python.

Priorité des opérateurs Python

La combinaison de valeurs, de variables, d'opérateurs et d'appels de fonction est appelée expression. L'interpréteur Python peut évaluer une expression valide.

Par exemple:

 >>> 5 - 7 -2

Voici 5 - 7une expression. Il peut y avoir plus d'un opérateur dans une expression.

Pour évaluer ces types d'expressions, il existe une règle de priorité en Python. Il guide l'ordre dans lequel ces opérations sont effectuées.

Par exemple, la multiplication a une priorité plus élevée que la soustraction.

 # Multiplication has higher precedence # than subtraction >>> 10 - 4 * 2 2

Mais nous pouvons changer cet ordre en utilisant des parenthèses ()car il a une priorité plus élevée que la multiplication.

 # Parentheses () has higher precedence >>> (10 - 4) * 2 12

La priorité des opérateurs en Python est répertoriée dans le tableau suivant. Il est par ordre décroissant (le groupe supérieur a une priorité plus élevée que le groupe inférieur).

Les opérateurs Sens
() Parenthèses
** Exposant
+x, -x,~x Unaire plus, unaire moins, pas au niveau du bit
*, /, //,% Multiplication, division, division de plancher, module
+, - Addition soustraction
<<, >> Opérateurs de décalage au niveau du bit
& ET au niveau du bit
^ XOR au niveau du bit
| OU au niveau du bit
==, !=, >, >=, <, <=, is, is not, in,not in Comparaisons, identité, opérateurs d'appartenance
not NON logique
and ET logique
or OU logique

Regardons quelques exemples:

Supposons que nous construisions un if… elsebloc qui fonctionne iflorsque le déjeuner est soit un fruit soit un sandwich et seulement si l'argent est supérieur ou égal à 2.

 # Precedence of or & and meal = "fruit" money = 0 if meal == "fruit" or meal == "sandwich" and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")

Production

 Déjeuner livré

Ce programme exécute le ifbloc même lorsque money vaut 0. Il ne nous donne pas la sortie souhaitée car la priorité de andest supérieure à or.

Nous pouvons obtenir la sortie souhaitée en utilisant des parenthèses ()de la manière suivante:

 # Precedence of or & and meal = "fruit" money = 0 if (meal == "fruit" or meal == "sandwich") and money>= 2: print("Lunch being delivered") else: print("Can't deliver lunch")

Production

 Je ne peux pas livrer le déjeuner

Associativité des opérateurs Python

Nous pouvons voir dans le tableau ci-dessus que plus d'un opérateur existe dans le même groupe. Ces opérateurs ont la même priorité.

Lorsque deux opérateurs ont la même priorité, l'associativité permet de déterminer l'ordre des opérations.

L'associativité est l'ordre dans lequel une expression est évaluée qui a plusieurs opérateurs de la même priorité. Presque tous les opérateurs ont une associativité de gauche à droite.

Par exemple, la multiplication et la division par étage ont la même priorité. Par conséquent, si les deux sont présents dans une expression, celui de gauche est évalué en premier.

 # Left-right associativity # Output: 3 print(5 * 2 // 3) # Shows left-right associativity # Output: 0 print(5 * (2 // 3))

Production

 3 0

Remarque : l'opérateur exposant **a une associativité de droite à gauche en Python.

 # Shows the right-left associativity of ** # Output: 512, Since 2**(3**2) = 2**9 print(2 ** 3 ** 2) # If 2 needs to be exponated fisrt, need to use () # Output: 64 print((2 ** 3) ** 2)

Nous pouvons voir que cela 2 ** 3 ** 2équivaut à 2 ** (3 ** 2).

Opérateurs non associatifs

Certains opérateurs comme les opérateurs d'affectation et les opérateurs de comparaison n'ont pas d'associativité en Python. Il existe des règles distinctes pour les séquences de ce type d'opérateur et ne peuvent pas être exprimées en associativité.

Par exemple, x < y < zni signifie (x < y) < zni x < (y < z). x < y < zéquivaut à x < y and y < z, et est évalué de gauche à droite.

En outre, bien que l'enchaînement des affectations comme x = y = z = 1soit parfaitement valide, x = y = z+= 2entraînera une erreur.

 # Initialize x, y, z x = y = z = 1 # Expression is invalid # (Non-associative operators) # SyntaxError: invalid syntax x = y = z+= 2

Production

 Fichier "", ligne 8 x = y = z + = 2 SyntaxError: syntaxe incorrecte

Articles intéressants...