Les variables

En python, une variable a un nom et on lui associe une valeur.

Création d’une variable

Créer une variable en python est extrêmement simple: il suffit de lui affecter une valeur grâce au symbole =:

>>> x = 13

Pour lire le contenu d’une variable (en mode interactif), il suffit de taper son nom:

>>> x
13

Évolution d’une variable

Contrairement à la notion de variable en mathématique (où la valeur ne change en général pas), les variables en python portent bien leur nom: elles varient !

Pour changer la valeur d’une variable, il suffit de lui en affecter une nouvelle. Le nom de la variable sera alors associé à la nouvelle valeur:

>>> x = 1
>>> x
1
>>> x = 35
>>> x
35

L’affectation à x de la valeur 35 écrase l’ancienne valeur 1 de la mémoire: on peut affirmer que la variable x a changé de valeur.

Affectation \(\neq\) égalité

Un point très important: le symbole = en python est un symbole d’affectation et non pas un symbole d'égalité. D’ailleurs, pour tester l'égalité entre deux valeurs en python (et dans de nombreux autres langages de programmation) on utilise le double symbole d'égalité == comme nous le verrons un peu plus tard.

Voici un exemple illustrant cette nuance:

>>> x = 1
>>> x
1
>>> x = x + 1
>>> x
2

On se rend bien compte que l’on ne peut pas comprendre la ligne x = x + 1 comme une égalité mathématique. D’ailleurs, en mathématique, l'égalité \(x = x + 1\) serait toujours fausse. Et si la considérait comme une équation, elle n’aurait aucune solution.

Voici comment python gère cette instruction:

  1. Il commence par calculer la valeur du membre de droite. Comme x vaut initialement 1, le membre de droite vaudra 2.
  2. Ensuite, il affecte ce résultat à la variable se trouvant dans le membre de gauche, qui se trouve être encore une fois x: autrement dit, x change de valeur et vaudra à présent 2.

L’instruction x = x + 1 est très courante en informatique: elle sert à incrémenter une variable de 1.

Attention, il n’est pas possible d'échanger les deux membres de l’affectation: le membre de gauche doit nécessairement être le nom d’une variable à laquelle sera affecté le résultat du calcul du membre de droite.

Ainsi, l’instruction x + 1 = x déclenche une erreur:

>>> x + 1 = x

Voici l’erreur affichée par l’interpréteur python:

    File "<stdin>", line 1
SyntaxError: can't assign to operator

Faut-il déclarer les variables en python ?

En mathématiques, on ne peut pas utiliser une variable (ou une indéterminée) sans l’avoir spéciée au préalable (avec une tournure classique: Soit \(x\) le réel tel que \(\dots\).

Dans de nombreux langages informatiques, il est de même nécessaire de déclarer une variable avant de pouvoir l’utiliser, en précisant par exemple que la variable x prendra toujours des valeurs entières.

En python, non seulement cela n’est pas nécessaire comme nous l’avons vu plus haut, ce mécanisme est même inexistant. Cela comporte des avantages et des désavantages: D’un côté, on gagne en souplesse, l'écriture des programmes est moins encombrées de tâches administratives; Le revers de la médaille est que l’absence de déclaration rend la détection des bugs bien plus délicate, comme nous aurons hélas l’occasion de nous en rendre compte au fur et à mesure de l’année.

Cependant, il demeure totalement interdit de vouloir accéder à une variable qui n’aura pas été initialisée au préalable:

>>> print(toto)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'toto' is not defined

Ici, la tentative d’accès à une variable toto est vouée à l'échec, puisqu’aucune variable portant ce nom n’a été définie au préalable.

On a vu un peu plus haut que d’autres langages de programmation imposent la déclaration préalable des variables avant leur utilisation, mais aussi imposent de déclarer le type de données qu’elles pourront contenir (nombre entier, nombre à virgule flottante, chaîne de caractères, etc\(\dots\)

En python, non seulement c’est inutile, mais en outre python n’associe pas à une variable un quelconque type: ce sont les valeurs qui ont un type associé (python ne confondra jamais un entier avec une chaîne de caractère, par exemple), les variables sont simplement des noms auxquels sont associées des valeurs dont le type peut évoluer au cours du temps.

>>> x = 42
>>> x
42
>>> x = 3.1415927
>>> x
3.1415927
>>> x = "Bonjour"
>>> x
'Bonjour'

Règle d’or: À l’intérieur d’un programme (ou d’une fonction), on s’astreindra toujours à associer à une variable donnée un unique type de donnée, même si le langage autorise des débordements.