Licence CC BY-SA

Des variables pour sauvegarder nos résultats

Lorsque nous entrons une expression dans l’interpréteur interactif, sa valeur est calculée puis affichée dans le terminal. Mais après cela elle est perdue. Pourtant il pourrait nous être utile de conserver un résultat, afin de le réutiliser par la suite dans d’autres calculs.

Par exemple, dans un jeu, on aimerait pouvoir conserver le nombre de points de vie d’un joueur, pour l’utiliser dans le calcul des dégâts ou pour le modifier.

Comment faire alors ? Grâce aux variables bien sûr !

Une étiquette sur une valeur

En effet, ce sont les variables qui vont nous permettre de stocker nos résultats de calculs. Une variable, c’est juste un nom que l’on associe à une valeur, afin d’indiquer à Python de la conserver en mémoire (de ne pas l’effacer) mais aussi de pouvoir la retrouver (grâce à son nom).

On peut voir la variable comme une simple étiquette qui sera collée sur notre valeur pour indiquer comment elle se nomme.

En Python, on assigne une variable sur une valeur à l’aide de l’opérateur =. À gauche on écrit le nom de la variable, une suite de lettres sans espace. La valeur peut être n’importe quelle expression comme vu précédemment.

>>> result = round(8 / 3) + 2

On voit que l’interpréteur ne nous affiche rien cette fois-ci, parce que le résultat a été stocké dans result. result est une variable qui pointe non pas vers l’expression round(8 / 3) + 2 mais vers le résultat de cette opération, soit le nombre 5.

Une variable est une étiquette sur une valeur.
Une variable est une étiquette sur une valeur.

Si l’interpréteur ne nous affiche rien, c’est aussi parce que result = round(8 / 3) + 2 n’est pas une expression. Cette ligne définit une variable mais ne possède pas de valeur à proprement parler. On ne peut pas l’utiliser au sein d’une autre expression. On dit simplement qu’il s’agit d’une instruction.

Le nom de la variable définie devient quant à lui une valeur comme une autre, qui peut être utilisée dans différentes opérations.
Dans chaque expression, le nom de variable est évalué par Python et remplacé par sa valeur, permettant donc d’exécuter la suite du calcul.

>>> result
5
>>> result + 1
6
>>> min(result + 2, result * 2)
7

Et par extension, il est donc possible de définir une variable à l’aide de la valeur d’une autre variable :

>>> result2 = result - 1
>>> result2
4

Assignations

Comme son nom l’indique, une variable n’est pas fixée dans le temps. À tout moment, il est possible de la réassigner sur une nouvelle valeur, perdant ainsi la trace de l’ancienne.

>>> result = 6 * 7
>>> result
42
>>> result = 9 * 4
>>> result
36
Réassignation de variable.
Réassignation de variable.

Mais on peut aussi utiliser une même variable à gauche et à droite de la définition.

>>> result = result + 1

Il ne faut donc pas voir ici le = comme une égalité, mais bien comme une assignation.
La ligne précédente signifie que l’on prend la valeur actuelle de result (36), que l’on lui ajoute 1, et que l’on assigne ce nouveau résultat à la variable result. result vaut donc maintenant 37.

Autre exemple avec la réassignation d’une variable x.

>>> x = 3
>>> x = x + 2
>>> x
5

Les opérations du type x = x + y sont d’ailleurs tellement courantes que Python leur a prévu un opérateur d’affectation spécifique : +=.
x += 1 est ainsi équivalent à x = x + 1. On appelle cette opération une incrémentation, car on ajoute un incrément au nombre actuel.

Et cela ne se limite pas à l’addition mais comprend aussi les autres opérateurs arithémtiques qui bénéficient tous de leur propre opérateur d’affectation : -=, *=, /=, //=, %= et **=. L’opération de soustraction-assignation (-=) s’appelle une décrémentation.

>>> x = 0
>>> x -= 8
>>> x *= -11
>>> x //= 4
>>> x **= 3
>>> x %= 10
>>> x
8

Une autre propriété intéressante de l’opérateur = est qu’il peut être chaîné afin de définir plusieurs variables en même temps.

>>> x = y = 10
>>> x
10
>>> y
10

Conventions

Un nom de variable ne peut pas être composé de n’importe quels caractères. Il ne doit contenir que des lettres (minuscules ou majuscules), des chiffres et des underscores (caractère _). L’autre règle est que le nom ne peut pas commencer par un chiffre.

C’est-à-dire que le nom de peut pas contenir d’espaces ou de caractères spéciaux, contrevenir à ces règles produira des erreurs de syntaxe.

>>> 0x = 1
  File "<stdin>", line 1
    0x = 1
     ^
SyntaxError: invalid token
>>> x y = 1
  File "<stdin>", line 1
    x y = 1
      ^
SyntaxError: invalid syntax
>>> x! = 1
  File "<stdin>", line 1
    x! = 1
     ^
SyntaxError: invalid syntax

Certains noms sont aussi réservés, car ils correspondent à des mots-clés Python. Il est ainsi impossible de nommer une variable avec l’un des noms présent dans le tableau suivant.

False

await

else

import

pass

None

break

except

in

raise

True

class

finally

is

return

and

continue

for

lambda

try

as

def

from

nonlocal

while

assert

del

global

not

with

async

elif

if

or

yield

Type "help", "copyright", "credits" or "license" for more information.
>>> def = 10
  File "<stdin>", line 1
    def = 10
        ^
SyntaxError: invalid syntax

Il faut ajouter à cela quelques conventions de style. Il est ainsi conseillé d’éviter les lettres majuscules et accentuées dans les noms de variables. Par exemple, pour un nom de variable composé de plusieurs mots, on préfèrera points_vie à pointsVie.
Mais on préférera souvent utiliser l’anglais pour garder une cohérence avec les mots-clés du langage et faciliter les collaborations, notre variable se nommerait donc plutôt health_points.

Aussi, il est déconseillé de nommer une variable d’un même nom qu’une fonction de Python, comme abs, min ou max.

On évitera enfin les noms l, O ou I qui portent à confusion car ne sont pas bien distingables de 1 ou 0 avec certaines polices de caractères.

Les différentes règles de style à appliquer en Python sont décrites dans la PEP8. Il s’agit d’un guide écrit par les créateurs de Python pour aider à comprendre ces conventions.
Une section de la PEP8 est particulièrement dédiée au nommage : https://www.python.org/dev/peps/pep-0008/#naming-conventions.

La variable _

Autre convention, il est courant d’appeler _ une variable dont on n’utilise pas le résultat. Cela est utile dans des cas où il est nécessaire de préciser un nom de variable mais dont on ne veut pas vraiment conserver la valeur. On verra ça par la suite avec les assignations multiples où _ pourra servir à combler les trous.

La variable _ a aussi un sens spécial dans l’interpréteur interactif : elle garde la trace de la dernière expression calculée et affichée.

>>> 1 + 2
3
>>> _
3
>>> _ + 1
4
>>> _ + 1
5