Variables¶

Qu'est ce qu'une variable ?¶

Stockage de l’information¶

  • temporaire: perte d’information après fermeture du programme
  • à long terme: données destinées à être réutilisées plus tard

Une variable désigne une adresse mémoire de l'ordinateur¶

  • On affecte une étiquette (nom de variable) à cette adresse mémoire
  • La variable possède un type: entier, réel, caractères, chaîne, booléen

Syntaxe générale et affectation¶

  • nom_de_variable = expression

Attention l'expression à droite du signe égal est évaluée, ensuite et seulement ensuite, python (l'interpréteur plus exactement) affecte au nom de variable la valeur obtenue (on parlera plutôt d'objet). Lors de la première affectation on utilisera le terme initialisation de la variable.

In [ ]:
a = 2 # la ligne complète est appelée instruction
b = 3
c = a + b

L'ensemble des variables définies à un instant donné de l'exécution d'un programme est appélé état. Lors de l'évaluation de l'expression les noms de variables sont remplacés par leurs valeurs.

Le signe égal = n'a pas la même signification qu'en mathématiques. Par exemple lors d'une affectation l'instruction n'est pas symétrique. Vouloir échanger l'ordre des éléments provoquera une erreur.

In [ ]:
a = 2 #correct
2 = a #incorrect

Une autre bizarrerie du symbole = Que vaut x dans l'exemple ci-dessous ?

In [ ]:
x = 0
x = x + 1 #Mathématiquement cette équation n'a pas de sens
x = x + 1 #par contre cette instruction est très utilisée en programmation
x = x + 1

On peut aussi écrire (opération-affectation)

In [ ]:
a += 2
a *= 3
b /= 2
b -= 2

Pour afficher des résultats

In [ ]:
print(a)
print(b)

Affectation parallèle : toutes les expressions sont évaluées avant la première affectation

In [ ]:
x, y = 2, 3

Que se passe-t-il dans l'affectation suivante ? Pourquoi ?

In [ ]:
xx, yy = 2, xx

Enigme : comment échanger le contenu de deux variables ?¶

In [ ]:
a = 2
b = 3

Comment nommer une variable ?¶

  • Pas d'espace
  • Pas de mots clé du langage
  • Ne pas commencer par un chiffre
  • Pas d'accent
  • Donner un nom explicite
  • Attention les noms de variables sont sensibles à la casse

Typage dynamique¶

Dans la majorité des langages on déclare le nom et le type de la variable. C'est le typage statique

In [ ]:
# en langage Java ou C on écrit
int a = 2015;

En Python le typage se fait à l'exécution. C'est le typage dynamique

Un nom de variable est en fait une référence vers un objet python. Chaque objet possède un type

In [1]:
# en langage Python on écrit
a = 2015
In [2]:
print type(a)
<type 'int'>
In [3]:
a = "2015"
print type(a)
<type 'str'>

Les types les plus utilisés

  • Float : nombre à virgule flottante
  • Integer : entier
  • Long : un entier très grand
  • String : chaîne de caractères
  • Boolean : 2 valeurs possibles uniquement --> True ou False

Un objet possède des fonctionnalités qui dépendent de son type, la fonction native $dir$ permet d'avoir la liste de ces fonctionnalités.

In [ ]:
a = 2
print(dir(a))
In [ ]:
a = "coucou"
print(dir(a))

On peut obtenir des informations sur une des fonctionnalités avec la primitive : help

In [ ]:
help(a.count)

Pour appeler les fonctions liées à un objet on utilise le nom de l'objet suivi d'un point et du nom de la fonction:

$$\text{nomObjet}.\text{fonction()}$$

Par exemple l'étiquette $a$ (ci-dessus) référence un objet de type chaîne de caractères. Il est alors possible d'utiliser la fonction $count$ pour obtenir le nombre d'occurence d'une sous chaîne contenu dans la chaîne "coucou"

In [ ]:
print(a.count("co"))
In [ ]:
a = u"L'informatique c'est fantastique"
print a.count("i")
print a.count("i",0,11)

Remarque : Pour une même valeur le type d'une variable peut dépendre de la méthode de calcul lors de l'évaluation de l'expression

Peut-on changer le type d'un objet ?¶

In [ ]:
a = 2.3
print(type(a))
In [ ]:
a = int(a)
print(type(a))

Exemple : évaluer la valeur et le type des variables suivantes :

In [ ]:
a = 3
n1 = a/2
n2 = float(a/2)
n3 = float(a)/2
n4 = a/float(2)
n5 = a/2.

Un module pour générer des nombres aléatoires¶

In [ ]:
import random as rd
print rd.randint(0, 6) #[0,6]
print rd.random() #[0,1[
print rd.uniform(0, 6) #[0,6]

Les objets suivants sont-ils les mêmes ?¶

Un nom de variable est une référence vers un objet python qui possède un identifiant

In [ ]:
print "id(a) = ",id(a)
print "id(b) = ",id(b)
In [ ]:
a = 2**24
b = a
In [ ]:
print id(a), id(b)
print a is b
print a==b
In [ ]:
a = 2**24
b = 2**24
In [ ]:
print id(a), id(b)
print a is b
print a==b