Python Variables

Identification

Infoforall

3 - Les variables dans Python


Nous allons voir comment stocker des informations pour les réutiliser ensuite sans avoir à les récrire.

Les notions de int, float et string vont nécessairement refaire surface.

Pour fournir une introduction à cette notion de variable, nous allons utiliser un environnement de développement : un ensemble logiciel permettant de programmer, de sauvegarder son travail et possèdant un ensemble d'outils pour concevoir, dégugger et organiser son travail. Vous n'allez donc plus manipuler Python directement à travers la console mais à travers un logiciel se nommant Thonny. Il s'agit d'un logiciel développé par l'Université de Tartu en Estonie.

Logiciel nécessaire pour l'activité : Thonny

Evaluation ✎ : questions -

Résumé : Version HTML ou fond blanc ou ou PDF (couleur ou gris)

1 - Thonny

Si Thonny n'est pas installé, il est temps d'aller voir l'article sur l'installation de Python et de Thonny dans le menu du haut de page.

Voici d'abord un peu de documentation pour ouvrir et présenter un peu Thonny. Je vous conseille de l'ouvrir et de l'utiliser en même temps qu'on y présente des choses.

Ouvrir Thonny sous Windows :

Rien de particulier : on clique sur l'icône.

Ouvrir Thonny sous Linux :

Si vous êtes en environnement graphique : on clique sur l'icône disponible dans les applications.

Si vous disposez d'un terminal, on peut utiliser la commande suivante :

rv@monordi:~$ thonny &

L'utilisation du & permet simplement de reprendre la main sur le terminal pendant l'exécution de Thonny.

Utiliser le Shell de Thonny :

Une fois le logiciel lancé, vous obtiendrez ceci :

  • La partie du haut permet de créer des scripts qu'on pourra enregistrer et exécuter
  • La partie du bas avec trois chevrons >>> permet de taper du code à exécuter directement en mode interactif. C'est cette partie que nous allons exploiter aujourd'hui.

Rien de bien particulier : le shell se comporte comme la console que nous avons ouvert dans l'activité précédente.

Il permet de taper du code Python qui sera exécuté immédiatement.

01° Ouvrir Thonny et tester son Shell avec quelques évaluations simples.

Quelle différence par rapport à la dernière fois ?

On peut installer Thonny sans avoir installé Python : Thonny peut utiliser sa propre version embarquée de Python !

On voit ainsi que l'utilisateur interagit avec une version de Python interne à Thonny. On parle d'environnement virtuel. Dans cette configuration, il n'y a pas nécessairement de liaison avec l'installation Python 3 présente (ou non) sur le reste de l'ordinateur.

2 - Variable

Comment parvenir à enregistrer des données ? La réponse est simple : on les place dans une variable.

Voyez dans un premier temps une variable comme une zone de stockage accessible en connaissant le nom de la zone.

02° Dans Thonny, sélectionner le menu VIEW et y prendre l'option VARIABLES. Vous devriez voir un panneau s'afficher sur la droite.

03° Taper la commande ci-dessous dans le Shell de Thonny. Le Shell affiche-t-il quelque chose ? Voyez-vous apparaître quelque chose dans le panneau de droite ?

>>> 5 5
>>> 7 + 2 9

...CORRECTION...

Le Shell évalue  5  et  7 + 2  et il affiche les résultats. Pourquoi ?

La console ou le shell est la destination par défaut de l'évaluation d'une expression si on ne lui demande pas particulièrement de faire autre chose que d'évaluer.

Rien n'apparaît dans le panneau de droite : aucune variable n'est créée spontanément.

04° Taper la commande ci-dessous dans le Shell de Thonny. Le Shell affiche-t-il quelque chose ? Que voyez-vous apparaître dans le panneau de droite ?

>>> a = 5 >>> b = 7 + 2

...CORRECTION...

Le Shell évalue  5  et  7 + 2  mais ne les affiche pas. Pourquoi ?

Cette fois, on lui demande de faire quelque chose de l'expression : le signe  =  veut dire de placer le résultat dans la variable placée devant le signe égal.

Ici, on place donc les résultats 5 et 9 dans des variables plutôt que de les envoyer à l'affichage.

De plus, on voit apparaître les deux variables dans le panneau de droite : cette fois, on a bien rangé ces deux valeurs en mémoire.

05° Taper les commandes ci-dessous dans le Shell de Thonny. Le Shell affiche-t-il quelque chose ? Comment parvient-on à récupérer la valeur stockée dans une variable ?

>>> a 5
>>> type(a) <class 'int'>
>>> b 9
>>> type(b) <class 'int'>

...CORRECTION...

Une fois qu'une variable a été affectée, on peut récupérer son contenu associé en tapant simplement son nom. Celui-ci correspond alors à un alias permettant d'obtenir le contenu de la zone mémoire corresopndante.

Déclaration et affectation

Et voilà, vous venez de déclarer (créer) votre première variable  a  à l'aide d'un  =  pour affecter 5 dans une case mémoire.

Cette opération se nomme une affectation.

On pourra retrouver la valeur en tapant simplement a.

En Python, la déclaration et l'affectation se fait en même temps puisqu'on ne choisit pas le type de variable. D'autres langages imposent de choisir le type de variable avant de pouvoir y affecter une valeur.

Ainsi, à chaque fois qu'on tapera a dans une expression, l'interpréteur Python remplacera cette variable par ce qui est stocké à l'adresse correspondante.

Ici, votre variable contient un entier, un Integer en langage informatique.

Dans 90% des cas, vous pouvez voir les variables comme le nom d'une boîte contenant quelque chose. Lorsqu'on tape ce nom, Python vous renvoie le contenu de la boîte.

On pourrait ainsi représenter a et b de cette façon :

représentation en boîte

06° Vérifier le bon fonctionnement des expressions suivantes :

>>> a = 5 >>> b = 9 >>> a*2 10 >>> a + b 14

07° Sans taper les lignes de commandes, tenter de trouver le résultat qui sera affiché à l'écran. Vérifier.

>>> a + 2*b >>> (a+2) * b

3 - Type et modification de type

Nous avons vu que nous pouvions faire plusieurs choses avec une variable :

  • Renvoyer la valeur auquelle elle fait référence simplement en tapant son nom
  • Renvoyer le type de grandeur qu'elle stocke (int, float, booléen ou string pour l'instant) : fonction type

Pour rappel, voici le récapitulatif de ces différents types :

Type de variableNom du type pour PythonCe qu'il peut contenir
Booléen / BooleanboolFalse or True (avec une majuscule)
Entier / IntegerintUn nombre entier comme 12
Nombre réel / FloatfloatUn nombre à virgule comme 12.0 ou 12.5
Chaîne de caractère / StringstrUne chaîne de caractères, c'est-à-dire un mot ou une phrase. On la définit entre deux guillemets ou apostrophes."chaîne de caractère" 'autre chaîne de caractère'

Et si nous placions un string dans la variable a ?

>>> a = "5" >>> a*2 '55'
>>> type(a) <class 'str'>
>>> type(a*2) <class 'str'>

08° Pourquoi obtient-on "55" et pas 10 ?

...CORRECTION...

On crée une variable a qui désigne un STRING "5".

Lorsqu'on demande de multiplier le string par 2, Python va alors simplement comprendre qu'on veut 2 "5" , soit "55" .

Comme vous le voyez, connaitre le type des données est important. Comment savoir à l'avance ce que désigne une variable ? Il faut utiliser une fonction native de Python : type.

09° Lancer les instructions suivantes pour vérifier le type de réponse obtenue. Vous remarquerez au passage qu'on n'utilise pas les accents dans les noms de variables.

>>> premiere = 5 >>> type(premiere) <class 'int'>
>>> deuxieme = "5" >>> type(deuxieme) <class 'str'>
>>> troisieme = 5.0 >>> type(troisieme) <class 'float'>

...CORRECTION...

La fonction type permet donc d'obtenir le type de la données stockée à l'adresse mémoire pointée par la variable.

Si on stocke 5, on obtient une variable de type int pour integer (nombre entier)

Si on stocke "5", on obtient une variable de type str pour string (chaîne de caractères)

Si on stocke 5.0, on obtient une variable de type float pour float (nombre réel ou nombre à virgule flottante)

Modifier un type de variable

On peut bien entendu tenter de transformer un type de variable en une autre. Pour cela, on utilise les fonctions natives suivantes :

  • int pour tenter de transformer en entier.
  • float pour tenter de transformer en réel.
  • str pour tenter de transformer en chaîne de caractères.

10° Lancer les instructions suivantes pour comprendre ce que fait la fonction str :

>>> a = 5 >>> type(a) >>> a*2 >>> b = str(a) >>> type(b) >>> b*2

...CORRECTION...

1e cas : a est un integer. On obtient un string b.

b désigne "5".

2*b désigne "55"

5 petites remarques à connaitre et à respecter pour finir :

Remarque 1 : vous remarquerez que tous les noms de variables commencent par une minuscule. Respectez cette habitude. Les majuscules, c'est pour autre chose.

Remarque 2 : il existe une liste des noms réservés qu'on ne peut pas utiliser car l'interpréteur Python les utilise déjà comme mots-clés lorsqu'il analyse le texte qu'on lui fournit  :

False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise
LIEN EXTERNE VERS LA DOCUMENTATION PYTHON

Remarque 3 : Les ordinateurs ont suffisamment de mémoire désormais pour ne plus créer des variables ne comportant qu'une seule lettre. Si possible, tenter de donner à vos variables des noms explicites : des noms permettant de savoir au premier coup d'oeil ce qu'elles contiennent. On n'utilisera d'ailleurs jamais de variable dont le nom est un  l  (L minuscule) : il est trop difficile à distinguer d'un  I  (I majuscule) !

Remarque 4 : Python est sensible à la casse. Cela veut dire qu'il distingue les minuscules et les majuscules. Les variables toto et toTO désignent donc bien deux variables différentes. Pour ne pas se perdre dans les notations, on propose souvent d'utiliser l'une des conventions ci-dessous pour les variables composées de plusieurs mots :

  • Utiliser des underscores entre les mots
    • concentration_initiale
    • vitesse_voiture
    • debit_entree
  • Utiliser une majuscule pour séparer les mots
    • concentrationInitiale
    • vitesseVoiture
    • debitEntree

Remarque 5 : Comme l'affectation est importante puisqu'elle modifie l'ID associé à la variable, elles apparaissents en gras dans les codes de ce site.

4 - Allons plus loin : Variable, identifiant mémoire et valeur stockée

Voici de quoi aller un peu plus loin dans la compréhension des variables. Nous avons vu que la gestion des variables peut être vue comme une simple affaire de boîtes sur les cas simples.

Profitons de la fin de cette activité pour vous dévoiler la vérité sur les variables.

Le modèle de la variable-boîte est simple et pratique mais il ne permet pas d'expliquer certains cas plus complexes que nous rencontrerons plus tard.

Espace des noms

Pour ceux qui veulent en savoir un peu plus, une variable est en réalité un raccourci pour atteindre une zone mémoire sans avoir à fournir son adresse réelle.

L'interpréteur se crée un tableau faisant la liaison entre le nom que vous avez utilisé et une zone de la mémoire (adr dans les images ci-dessous).

Sur l'exemple ci-dessous :

  • Lorsque l'interpréteur tombe sur a, il part voir dans ce tableau.
  • Il voit que l'identifiant-mémoire associé à cette variable est 68.
  • Il va alors voir le contenu stocké à cet emplacement mémoire 68 et renvoie 5.
espace des noms

11° Dans le menu VIEW, sélectionner allocation mémoire si vous avez la version française ou heap si vous avez la version anglaise de Thonny. Retrouver le contenu qui est lié à b en suivant la référence.

...CORRECTION...

On voit (sur l'image ci-dessous) que le nom b fait référence à l'adresse-mémoire notée 0xA67BC0.

Dans le tableau Heap, on voit que l'adresse-mémoire 0xA67BC0 contient la valeur  9 .

12° Tapez simplement 30 (et entrée) dans le Shell. A-t-on stocké le résultat dans une variable ? Le résultat est-il néanmoins encore en mémoire pour l'instant ?

...CORRECTION...

Aucune variable n'a été créée automatiquement : nous n'avons pas réalisé d'affectation.

Néanmoins, l'interpréteur Python interne à Thonny a gardé ce 30 en mémoire, dans la zone identifiée par 0XA67E60.

13° Remplacer le contenu de a par 50 à l'aide de  a = 50 . Que constatez-vous sur l'identifiant de a ? Reste-il identique ou a-t-il été modifié ?

...CORRECTION...

La variable qui porte maintenant le nom a ne fait plus référence à la même zone mémoire.

Ce nom est maintenant associé à la zone identifiée par 0xA680E0.

Cette zone contient 50.

Comme on peut le constater, réaliser une nouvelle affectation (avec le signe  = ) change simplement l'identifiant associé à la variable et donc la zone vers laquelle pointe la variable.

Cela pourrait donner ceci sur la représentation fournie quelques lignes ci-dessus :

Notation étrange des adresses-mémoire : vous avez certainement remarqué que les adresses fournies par Thonny sont un peu étranges. Il s'agit de nombres hexadécimaux. Il s'agit de nombres comportant des chiffres supplémentaires après le 9. On peut ainsi utiliser A, B, C, D, E et F. Nous n'utiliserons pas cette notion tout de suite mais il y a une fiche à ce propos sur le site.

Maintenant que vous avez compris qu'une variable contient en réalité une adresse, désactivez la visualisation du HEAP.

Python (et Thonny) utilise ce numéro d'identification pour identifier facilement ses variables. Deux variables peuvent ainsi porter le même nom : elles auront néanmoins un identifiant-mémoire différent. Cet identifiant permet de les différencier à coup sur. S'il existe deux personnes portant le même nom, c'est pareil avec le numéro de sécurité sociale.

Pour le connaitre, on peut utiliser la fonction id.

14° Désactivez la visualisation du HEAP. En vous inspirant du code ci-dessous, visualiser les identifiants-python de vos variables.

La première version correspond à la valeur en décimal, la seconde valeur à la même valeur mais exprimée en hexadécimal.

>>> id(a) ??? >>> id(b) ???
>>> hex(id(a)) ???
>>> hex(id(b)) ???
Identifiant Python d'une variable

L'interpréteur Python fait la liaison entre le code fourni et la mémoire.

La fonction id permet d'obtenir un numéro interne à Python pour identifier votre variable.

Il ne s'agit pas de la vraie adresse-mémoire mais d'un simple identifiant.

Nous avons réussi à bien formaliser les choses en utilisant le Shell. Mais nous ne faisons que taper des instructions qui s'exécutent immédiatement.

Nous avons vu comment stocker des informations dans des variables.

Il nous reste à voir comment stocker des instructions : créer un programme. De cette façon, nous n'aurons pas à taper les instructions. Elles seront enregistrées en mémoire.

Activité publiée le 28 08 2019
Dernière modification : 17 09 2020
Auteur : ows. h.