Nous avons vu que l'on pouvait utiliser des variables avec des noms plus longs qu'une lettre à l'opposé de ce que l'on voit souvent en maths ou en sciences. C'est une bonne pratique.
=
réalise l'affectation, il n'est pas symétrique.a = 5
se note .In [40]: a = 3 # un entier de valeur 3 est affecté à a, In [41]: x = 20 - a*5 # 5 est affecté à x In [42]: x = 2*x + 1 # 11 est affecté à x In [43]: y = x*x - 1 In [44]: y Out[44]: 120
Remarques :
y
est 120. Avec plus de rigueur, on dira que y
pointe vers un entier de valeur 120.x
est utilisée dans le calcul du membre de droite. Le résultat du membre de droite est stocké, la variable x
pointe alors vers ce résultat.#
.
Pour une seconde lecture !
ValueError
se produit.**kwargs
; un exemple sera donné après la présentation des dictionnaires.Exemples :
In [50]: a, b = 2, 3, 4 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: too many values to unpack (expected 2) In [51]: a, b, c, d = 2, 3, 4 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: not enough values to unpack (expected 4, got 3) In [52]: a, b, c = 2, 3, 4 In [53]: a + b*c Out[53]: 14 In [54]: a = 2, 3, 4 In [55]: a[0], sum(a), a Out[55]: (2, 9, (2, 3, 4)) In [56]: a, b, *c, d = 1, *a, 5, 6; print(a, b, c, d) Out[56]: 1 2 [3, 4, 5] 6
Utilisations pratiques :
Il est alors possible, en Python, de faire de l'affectation parallèle.
1] C'est particulièrement pratique pour échanger le contenu de deux variables
x
ety
.
temp = x x = y y = temp
Le code ci-dessus peut être remplacé par :
x, y = y, x
2] Il est possible aussi, en Python, de faire de l'affectation multiple
c = b = a
On ne peut pas choisir n’importe quel nom pour une variable.
De manière synthétique, on a :
a→z
, A→Z
, 0→9
et _
choisir_un_nom_de_variable_lisible
, choisirUnNomDeVariablePlusLisible
, nepaschoisirunnomdevariableillisible
, JE_SUIS_UNE_JOLIE_CONSTANTE
nombre_dOr
, a15
sont valides et lisibles.niter
, nIter
, NITER
sont trois variables différentes, la seconde étant la plus lisible des trois.Çå_Ãĺòŕš
, mais non conseillées._
, sauf si vous savez/voulez travailler avec des variables privées.Exemple méchant authentique
value = 42 valuе = 1000 print(value) # on s'attend à un affichage de 1000 ; logique ! Et NON !!!
42
Explication :
value
est écrit avec des caractères directement accessibles au clavier, la dernière lettre est un 'e' latin dont le code est 101.valuе
se termine par un 'е' cyrillique dont le code est 1077. Visuellement identique, ce n'est pas le même caractère, et donc il y a deux variables différentes.Further reading : WTFPython. Warning very difficult.
Ceci constitue probablement une raison (pour certains) de déconseiller l'utilisation de variables avec lettres Unicode. La véritable raison est ailleurs. Écrire un code qui a vocation à rester dans un cercle restreint - éducatif par exemple, une classe - peut parfaitement utiliser des variables avec des noms qui ont un sens en français et même avec accents. Pour se prémunir du piège précédent, il suffit d'utiliser un explorateur de variables (inclus dans Spyder) ; cela aide beaucoup à identifier des noms de variables proches (et qui ne le devraient pas) !
Par contre, un code qui a vocation à être utilisé et partagé largement doit :
a→z
, A→Z
, 0→9
et _
dans les noms de variables.L'objectif étant d'avoir un code qui soit compris et utilisable par la communauté ; et l'anglais est la norme !
Dans la suite de ce cours, en français, pour un public francophone, on utilisera des identifiants de variable :
- en français ; pour mieux différencier les mots du langage Python
- avec accents ; tous les accents, on reste cohérents,
- avec de rares abréviations, comme
nb
pour 'nombre de'.
Il y a 35 mots réservés (dont deux récents) qui ne peuvent pas être utilisés pour des variables.
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
async
break
except
in
raise
await
Remarque : Seuls
False
,None
etTrue
commencent ici avec une majuscule.
Nous avons déjà vu :
False
et True
: les booléens Faux et Vrai.from
et import
: pour importer à partir d'un module.is
: test d'identité entre objets.Nous allons bientôt voir :
None
: pour une donnée 'sans valeur' ; zéro étant un entier possédant une valeur.del
: pour détruire (delete) une variable et/ou des données.and
, or
, not
: opérateurs sur les booléens : et, ou, non.def
ou lambda
, return
: pour définir une fonction.pass
: une instruction qui ne fait rien.if
, elif
, else
: pour les structures conditionnelles.for
, while
: pour créer des boucles.break
, continue
: pour des boucles plus complexes.in
: pour un test d'appartenance.Nous verrons plus tard certains mots réservés parmi ceux qui restent.
assert
: pour le débogage facile.try
, except
, raise
: pour la gestion des erreurs.with
, as
: pour la lecture de module ou de fichier.Pour les utilisateurs avancés :
class
: pour la programmation orientée objet (POO).global
, nonlocal
: pour modifier la portée d'une variable.yield
: pour la construction d'itérateur.