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. À droite on peut avoir 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 arithmétiques 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 _). La seconde règle est que le nom ne peut pas commencer par un chiffre.

Ainsi, un nom ne 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 donc impossible de nommer une variable avec l’un des noms présents 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.

Les lettres majuscules sont par contre conventionnelles pour des variables définies dans le fichier et dont la valeur ne change jamais. Par exemple une variable MAX_POINTS_VIE qui contient le nombre maximum absolu de points de vie possible. On parle alors habituellement de constante même si ce concept n’existe pas en tant que tel en Python.

On notera tout de même que les variables sont sensibles à la casse, c’est-à-dire qu’elles distinguent majuscules et minuscules. Ainsi points_vie et POINTS_VIE peuvent être définies comme deux variables distinctes et ne seront jamais mélangées.

>>> points_vie = 10
>>> POINTS_VIE = 20
>>> points_vie
10
>>> POINTS_VIE
20

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 distinguables 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 initialement d’un guide écrit par les développeurs de Python pour expliquer quelles sont les règles en vigueur dans le projet Python. Ce guide est ensuite devenu une référence pour de nombreux projets et aujourd’hui considéré comme un standard.

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