Les variables en Python

Une variable permet de stocker un objet en mémoire.

Il faut la voir un peu comme un sac à dos dans lequel vous rangez vos affaires.

sac_a_dos = ['stylo', 'cahier', 'gomme']

Vous pouvez ainsi y accéder quand vous le souhaitez sans avoir besoin de recréer à chaque fois l'objet auquel est associé la variable :

sac_a_dos = ['stylo', 'cahier', 'gomme']
print(sac_a_dos)

Vous pouvez redéfinir à n'importe quel moment une variable en y associant un nouvel objet :

sac_a_dos = ['stylo', 'cahier', 'gomme']
sac_a_dos = ['stylo', 'cahier', 'banane'] # pour le goûter
print(sac_a_dos)

Comment ça marche ?

En Python, on n'assigne pas vraiment de valeurs aux variables.

Au lieu de cela, Python donne la référence de l'objet (valeur) à la variable.

La variable devient alors un pointeur vers cette référence.

Pour illustrer ça, j'aime bien me le représenter avec le concept des prénoms :

Des milliers de personnes portent le même prénom. Toutes ces personnes sont différentes et pourtant on peut les appeler par le même prénom.

Par exemple :

prenom = 'Paul'
autre_prenom = prenom
print(prenom)
print(autre_prenom)

Quand j'exécute ce code, Python interprète l'instruction prenom = 'Paul', il crée un nouvel objet avec la valeur 'Paul' et crée un lien entre la variable prenom et cet objet.

Sur la deuxième ligne, Python interprète autre_prenom = prenom et vérifie que cet objet n'existe pas déjà en mémoire. Comme c'est le cas, il ne va pas le recréer. Il va juste créer un nouveau lien entre cette variable autre_prenom et l'objet dont la valeur est 'Paul'.

On peut utiliser la fonction id pour vérifier l'identifiant de l'espace mémoire dans lequel se trouve un objet associé à une variable :

prenom = 'Paul'
autre_prenom = prenom

# La fonction id retourne 2 pour les deux variables.
# Nous accédons donc au même objet (la chaîne de caractères 'Paul') avec deux variables différentes
print(id(prenom))        # 2
print(id(autre_prenom))  # 2

# Si on associe deux variables à deux objets différents, les id seront différents :
prenom = 'Patrick'
autre_prenom = 'Pierre'

# Les id sont différents, car nous accédons à deux objets différents, avec deux noms différents :
print(id(prenom))        # 3
print(id(autre_prenom))  # 4

La portée des variables

En Python, comme dans beaucoup d'autres langages, chaque variable est accessible dans un périmètre précis. On parle de scope en anglais.

Une variable définie à l'intérieur d'une fonction (dans l'espace local de la fonction) ne sera pas disponible à l'extérieur.

Par exemple :

def hello_paul():
    prenom = 'Paul'
    print('Hello {}'.format(prenom))

print(prenom)

À l'inverse une variable définie dans l'espace global (à l'extérieur de la fonction) sera disponible à l'intérieur de celle-ci :

prenom = 'Paul'

def hello_paul():
    print('Hello {}'.format(prenom))

hello_paul()

Assigner une valeur à une variable

Comme vous l'avez vu, on utilise le symbole égal = pour assigner une valeur à une variable :

prenom = 'Paul'
age = 24
homme = True

Python est un langage dynamique, nous n'avons pas besoin de lui dire qu'un nombre est un nombre ou qu'une chaîne de caractères est une chaîne de caractères.

Les assignations multiples

Comme je te l'ai dit, Python n'assigne pas vraiment de valeurs aux variables, il crée des liens entre des noms et des objets.

De ce fait, on peut lier plusieurs variables au même objet de cette manière :

a = b = c = 750
id(a)  # 4426172464
id(b)  # 4426172464
id(c)  # 4426172464

Les assignations parallèles

On peut aussi demander à Python d'assigner plusieurs variables à plusieurs objets différents de cette façon (voir l'unpacking) :

a, b, c = 1, 2, 3
print(a)
print(b)
print(c)

Cela revient au même que de faire :

a = 1
b = 2
c = 3

Ça vous fait économiser quelques lignes.

Les constantes

En théorie, une constante est un type de variable qu'on ne peut pas modifier.

Avec Python, on les déclare toujours en majuscule :

PI = 3.14
PRIMARY_COLOR = "#FF00FF"

Cependant, avec Python, les constantes n'en sont pas vraiment car on peut leur assigner des valeurs différentes à n'importe quel moment !

C'est plus une convention que respectent les développeurs Python et qui permet de séparer visuellement les variables destinées à être modifiées de celles qui ne le sont pas.

Concaténer des variables

Pour concaténer des variables, on utilise l'opérateur d'addition (+) :

prenom = 'Paul'
nom = 'Sims'

print(prenom + ' ' + nom)

En plus d'être un langage dynamique , Python est aussi un langage fortement typé.

Cela signifie que vous ne pouvez pas mélanger des chaînes de caractères avec des nombres ou d'autres types et vice-versa.

Si vous écrivez :

prenom = 'Paul'
age = 24

print(prenom + age)

Vous obtiendrez une erreur TypeError (erreur de type).

Dans ce cas-là vous devez convertir le type de votre variable pour pouvoir la concaténer.

En l'occurrence, on peut convertir le nombre 24 en chaîne de caractères '24' grâce à la fonction str()

prenom = 'Paul'
age = 24

print(prenom + ' ' + str(age))