2.2. Variables et types de base¶
Une variable est un nom que vous liez à une valeur à l’aide de l’opérateur =. Après l’affectation, le nom peut être utilisé partout où la valeur peut l’être :
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
Le membre de droite de = est évalué en premier, puis le résultat est lié au nom de gauche. Lire un nom qui n’a jamais été affecté lève une NameError.
Une variable n’est qu’une étiquette. Elle pointe vers une valeur – la valeur réside ailleurs, et une même valeur peut avoir un nombre quelconque d’étiquettes.
Les variables sont des étiquettes pointant vers des valeurs. Réaffecter une variable déplace l’étiquette ; cela ne modifie pas la valeur vers laquelle l’étiquette pointait auparavant.¶
2.2.1. Règles de nommage¶
Les noms commencent par une lettre ou un trait de soulignement et peuvent contenir des lettres, des chiffres et des traits de soulignement.
frame_countet_internalconviennent ;1st_frameest une erreur de syntaxe.Les noms sont sensibles à la casse :
Widthetwidthsont deux variables différentes.Évitez de réutiliser des noms intégrés comme
list,str,id()ouprint()– les masquer ne lève pas d’erreur, mais l’intégré d’origine devient inaccessible pour le reste du script.Convention :
snake_casepour les variables et les fonctions,ALL_CAPSpour les constantes que vous n’avez pas l’intention de modifier,CamelCasepour les noms de classes.
2.2.2. Types de base¶
Chaque valeur en Python possède un type qui détermine les opérations qu’elle prend en charge. Les quatre types que vous écrirez le plus souvent sont :
int – nombres entiers, positifs ou négatifs. Les entiers MicroPython peuvent grandir autant que la mémoire le permet. Les littéraux s’écrivent en chiffres simples :
0,42,-7. Les littéraux hexadécimaux (0x1A), octaux (0o17) et binaires (0b1010) sont également valides et utiles pour les registres et les masques de bits.float – nombres avec une virgule décimale ou un exposant :
3.14,1.0,-0.5,2e6(= 2 000 000.0). Tous les flottants sur la caméra sont des IEEE 754 32 bits – précis à environ sept chiffres significatifs.bool – l’un des deux littéraux
TrueouFalse(notez la majuscule).str – texte, écrit sous forme de caractères entre guillemets simples ou doubles :
"hello",'OpenMV'. Les deux styles de guillemets sont équivalents ; choisissez celui qui vous permet d’éviter d’échapper les guillemets apparaissant à l’intérieur de la chaîne.
Il existe aussi une cinquième valeur qu’il vaut la peine de connaître immédiatement :
None – l’unique valeur de type
NoneType. Utilisée pour signifier « aucune valeur » ou « pas encore définie ». Les fonctions qui ne retournent rien explicitement retournent implicitementNone.
2.2.3. Vérifier et convertir les types¶
La fonction intégrée type() retourne le type de n’importe quelle valeur :
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
Chaque type fait aussi office de fonction de conversion. Passez-lui une valeur d’un type différent et vous récupérez la valeur équivalente du nouveau type – lorsque la conversion est bien définie :
>>> int("42")
42
>>> int(3.9)
3 # truncates toward zero, not rounds
>>> float("1.5")
1.5
>>> str(255)
'255'
>>> bool(0), bool(1), bool("")
(False, True, False)
Les conversions qui ne sont pas bien définies lèvent une ValueError :
>>> int("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid syntax for integer with base 10
2.2.4. Réaffectation et typage dynamique¶
Un nom peut être réaffecté à une valeur de n’importe quel type à tout moment. Ce qui suit est légal :
x = 42
x = "now I'm a string"
x = 3.14
Python ne lie pas une variable à un type. Le code qui dépend de x étant un entier attend simplement un entier à l’endroit où il l’utilise ; s’il obtient autre chose, vous obtenez une TypeError à l’exécution.
Note
Réaffecter x ne modifie pas la valeur vers laquelle l’ancienne liaison pointait. Si deux noms partagent la même valeur, en réaffecter un n’affecte pas l’autre :
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
Muter une valeur partagée est différent : une méthode comme list.append modifie la valeur vers laquelle pointe la liaison, de sorte que tout autre nom pointant vers cette même valeur voit le changement.