Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| dev:python:core:tuples [2020/12/17 18:26] – ↷ Nom de la page changé de dev:python:core:typles à dev:python:core:tuples yoann | dev:python:core:tuples [2023/12/02 18:35] (Version actuelle) – yoann | ||
|---|---|---|---|
| Ligne 4: | Ligne 4: | ||
| - | le **tuple** est un type built-in | + | le **tuple** |
| - | * le test d' | + | |
| - | * accéder aux éléments avec **[]**, | + | |
| - | * faire du slicing etc | + | |
| - | La différence fondamentale entre la liste et le tuple est que le tuple est un objet immuable: une fois l' | + | * Accéder aux éléments avec l’opérateur d' |
| + | * Le test d' | ||
| + | * Faire du slicing etc | ||
| + | |||
| + | La différence fondamentale entre la liste et le tuple est que le tuple est un objet **immuable**: une fois l' | ||
| < | < | ||
| Ligne 15: | Ligne 16: | ||
| </ | </ | ||
| - | Pour créer un objet de type tuple on utilise les parenthèses: | + | Un tuple est généralement défini par une paire de parenthèses |
| <code python> | <code python> | ||
| - | >>> | + | >>> |
| + | (1, 2, 3) | ||
| - | >>> | + | >>> |
| - | tuple | + | (' |
| + | |||
| + | >>> | ||
| + | (42, ' | ||
| + | </ | ||
| + | |||
| + | On notera tout de même que les parenthèses sont facultatives, | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | (1, 2, 3) | ||
| + | |||
| + | >>> | ||
| + | (1, 2, 9) | ||
| + | |||
| + | >>> | ||
| + | (1, 2, 3, 1, 2, 3, 1, 2, 3) | ||
| </ | </ | ||
| - | Ci-dessus instanciation d'un tuple vide. | ||
| Attention à la syntaxe lors de la création d'un tuple contenant un seul élément. Il doit bien être obligatoirement suivi par la virgule afin que l’interpréteur ne considère pas | Attention à la syntaxe lors de la création d'un tuple contenant un seul élément. Il doit bien être obligatoirement suivi par la virgule afin que l’interpréteur ne considère pas | ||
| les parenthèse comme un groupement d' | les parenthèse comme un groupement d' | ||
| + | |||
| <code python> | <code python> | ||
| - | # Ces instructions NE créent PAS de tuple! | + | >>> |
| >>> | >>> | ||
| >>> | >>> | ||
| Ligne 42: | Ligne 61: | ||
| tuple | tuple | ||
| - | >>> | + | >>> |
| >>> | >>> | ||
| tuple | tuple | ||
| Ligne 48: | Ligne 67: | ||
| <note warning> | <note warning> | ||
| - | Pour un tuple singleton, c'est à dire un tuple d'un seul élément il ne faut pas oublier de mettre | + | Comme montré ci-dessus, pour un tuple singleton, c'est à dire un tuple d'un seul élément il ne faut pas oublier de placer |
| </ | </ | ||
| + | |||
| + | Par ailleurs, il est possible de définir un tuple vide à l’aide d’une simple paire de parenthèses (il n’y a dans ce cas pas de confusion avec d’autres utilisations possibles des parenthèses). | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | |||
| + | >>> | ||
| + | <class ' | ||
| + | </ | ||
| Pour cette raison, pour lever toute ambiguïté et se conformer aux recommandations, | Pour cette raison, pour lever toute ambiguïté et se conformer aux recommandations, | ||
| Ligne 60: | Ligne 88: | ||
| </ | </ | ||
| - | Une autre caractéristique importante pour la définition d'un tuple est que les parenthèses sont facultatives: | + | ===== Ordonnancement ===== |
| + | |||
| + | Les tuples sont ordonnables les uns par rapport aux autres, de la même manière | ||
| <code python> | <code python> | ||
| - | # un tuple | + | >>> |
| - | >>> | + | True |
| - | >>> | + | |
| - | tuple | + | |
| - | # cette instruction définie également un tuple: | + | >>> |
| - | >>> | + | False |
| - | >>> | + | </ |
| - | tuple | + | |
| + | Les fonctions **'' | ||
| + | |||
| + | <code python> | ||
| + | >>> len(values) | ||
| + | 3 | ||
| + | |||
| + | >>> | ||
| + | 4 | ||
| + | |||
| + | >>> | ||
| + | 6 | ||
| + | |||
| + | >>> | ||
| + | False | ||
| + | |||
| + | >>> | ||
| + | True | ||
| </ | </ | ||
| Ligne 101: | Ligne 146: | ||
| Le tuple étant immuable, on a bien créé une liste à partir du tuple, modifié la liste puis créer un nouvel objet tuple. | Le tuple étant immuable, on a bien créé une liste à partir du tuple, modifié la liste puis créer un nouvel objet tuple. | ||
| + | |||
| + | |||
| + | ===== Cas d' | ||
| + | |||
| + | On peut parfois se demander quand utiliser un tuple et quand utiliser une liste. Le tuple étant comparable à une liste non modifiable, il peut donc être utilisé pour toutes les opérations attendant une liste et ne cherchant pas à la modifier. Il est même préférable de l’utiliser si l’on sait qu’il ne sera jamais question de modification, | ||
| + | |||
| + | Mais il y a aussi des opérations qui ne sont possibles qu’avec les tuples. **Étant non modifiables, | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | ' | ||
| + | |||
| + | >>> | ||
| + | >>> | ||
| + | {(0, 0): ' | ||
| + | |||
| + | |||
| + | >>> | ||
| + | >>> | ||
| + | ' | ||
| + | </ | ||
| + | |||
| + | Cette structure permet ainsi de représenter d’une grille de données où chaque case est associée à ses coordonnées. | ||
| + | |||
| + | Si un tuple contient une liste, rien n’empêche d’ajouter des éléments à cette liste. | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | (' | ||
| + | </ | ||
| + | |||
| + | **Un tel tuple ne pourra donc pas être utilisé comme clé de dictionnaire**, | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | Traceback (most recent call last): | ||
| + | File "< | ||
| + | TypeError: unhashable type: ' | ||
| + | </ | ||
| + | |||
| + | Mais beaucoup d’utilisations des tuples sont tous simplement implicites. C’est en effet une manière de faire des assignations multiples de variables. | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | 1 | ||
| + | |||
| + | >>> | ||
| + | 2 | ||
| + | </ | ||
| + | |||
| + | Techniquement, | ||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | </ | ||
| + | |||
| ===== tuple unpacking ===== | ===== tuple unpacking ===== | ||
| Ligne 150: | Ligne 255: | ||
| * Que le terme à gauche du signe ' | * Que le terme à gauche du signe ' | ||
| * les deux termes aient la même longueur ou utilisent la notation *arg voir section extend unpacking. | * les deux termes aient la même longueur ou utilisent la notation *arg voir section extend unpacking. | ||
| + | |||
| + | |||
| + | Une propriété amusante de l' | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | |||
| + | >>> | ||
| + | |||
| + | >>> | ||
| + | 5 | ||
| + | |||
| + | >>> | ||
| + | 3 | ||
| + | </ | ||
| Ligne 186: | Ligne 307: | ||
| </ | </ | ||
| On voit bien ici que la variable t1 ne référence plus le même objet en mémoire après l' | On voit bien ici que la variable t1 ne référence plus le même objet en mémoire après l' | ||
| + | |||
| + | ===== Références ===== | ||
| + | |||
| + | * [[https:// | ||