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.
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.
a = 2 #correct
2 = a #incorrect
Une autre bizarrerie du symbole = Que vaut x dans l'exemple ci-dessous ?
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)
a += 2
a *= 3
b /= 2
b -= 2
Pour afficher des résultats
print(a)
print(b)
Affectation parallèle : toutes les expressions sont évaluées avant la première affectation
x, y = 2, 3
Que se passe-t-il dans l'affectation suivante ? Pourquoi ?
xx, yy = 2, xx
a = 2
b = 3
Dans la majorité des langages on déclare le nom et le type de la variable. C'est le typage statique
# 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
# en langage Python on écrit
a = 2015
print type(a)
a = "2015"
print type(a)
Les types les plus utilisés
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.
a = 2
print(dir(a))
a = "coucou"
print(dir(a))
On peut obtenir des informations sur une des fonctionnalités avec la primitive : help
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:
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"
print(a.count("co"))
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
a = 2.3
print(type(a))
a = int(a)
print(type(a))
Exemple : évaluer la valeur et le type des variables suivantes :
a = 3
n1 = a/2
n2 = float(a/2)
n3 = float(a)/2
n4 = a/float(2)
n5 = a/2.
import random as rd
print rd.randint(0, 6) #[0,6]
print rd.random() #[0,1[
print rd.uniform(0, 6) #[0,6]
Un nom de variable est une référence vers un objet python qui possède un identifiant
print "id(a) = ",id(a)
print "id(b) = ",id(b)
a = 2**24
b = a
print id(a), id(b)
print a is b
print a==b
a = 2**24
b = 2**24
print id(a), id(b)
print a is b
print a==b