Python: Les tuples

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

Un tuple est un ensemble d’éléments comparable aux listes mais qui, une fois déclaré, ne peut plus être modifié. Il s’agit donc d’une séquence immuable d’objets indicés qui peuvent être des nombres entiers ou décimaux, des chaînes de caractères, des listes, des tuples etc…

tuple_tulipes
Tuple de tulipes

Syntaxe et déclaration

D’un point de vue syntaxique, un tuple est un ensemble d’éléments séparés par des virgules. Cet ensemble d’éléments est entouré de parenthèses mais ce n’est pas une obligation. Cela permet toutefois d’améliorer la lisibilité du code.

Déclarons un tuple :

tuple_1 = (8, "Solange", 5.3)

J’aurais très bien pu écrire :

tuple_1 = 8, "Solange", 5.3

Cela revient au même sauf que c’est moins lisible.

print(type(tuple_1))

<class ‘tuple’>

Sans le savoir, nous avons déjà rencontré des tuples, notamment lorsque nous avons fait des affectations multiples :

a, b = 5, 6

Cette instruction d’affectation correspond à :

(a, b) = (5, 6)

Si nous souhaitons déclarer un tuple ne contenant qu’une seule valeur, il faut absolument que cette dernière soit suivie d’une virgule. En outre, il est vivement conseillé de l’inclure entre parenthèses.

c = (9,)

print(type(c))

<class ‘tuple’>

Si nous oublions la virgule (et malgré la présence de parenthèses), le type de la variable ne sera pas un tuple :

c = (9)

print(type(c))

<class ‘int’>

Utilité d’un tuple par rapport à une liste

Comme nous l’avons vu plus haut, il permet de faire des affectations multiples.

a, b = 5, 6

Le tuple permet également de renvoyer plusieurs valeurs lors d’un appel de fonction.

def information_personne(prenom, nom, age) :
    "Traitement des informations transmises"
    prenom = prenom.capitalize() # Première lettre en majuscule.
    nom = nom.upper() # remplace toutes les minuscules en majuscules
    age = int(age)
    return prenom, nom, age # Tuple sans parenthèses

p = input("Entrez votre prénom: ")
n = input("Entrez votre nom: ")
a = input("Entrez votre âge: ")

prenom, nom, age = information_personne(p, n, a) # Affectation multiple
print("Prénom:", prenom + '\n' + "Nom:", nom + '\n' + "Âge:", age)

Entrez votre prénom: alphonsine
Entrez votre nom: Chafouin
Entrez votre âge: 92

Résultat:

Prénom: Alphonsine
Nom: CHAFOUIN
Âge: 92

Un tuple est « protégé en écriture ».

Vous allez me dire que dans le code ci-dessus, nous pouvons obtenir le même résultat en renvoyant une liste (return [prenom, nom, age]). Mais l’avantage d’un tuple, c’est qu’il s’agit d’une séquence non modifiable (immuable) donc protégée en écriture. Nous sommes sûrs que les données transmises par la fonction input() ne seront pas modifiées en cours d’exécution par un autre programme. Dans le code ci-dessus, je n’ai aucun moyen de modifier les informations transmises.

Par contre, dans le code ci-dessous où je renvoie une liste, je peux modifier les données transmises et rajeunir Mamie Alphonsine!

def information_personne(prenom, nom, age) :
    "Traitement des informations transmises"
    prenom = prenom.capitalize() # Première lettre en majuscule.
    nom = nom.upper() # remplace toutes les minuscules en majuscules
    age = int(age)
    return [prenom, nom, age] # liste

p = input("Entrez votre prénom: ")
n = input("Entrez votre nom: ")
a = input("Entrez votre âge: ")

identification = information_personne(p, n, a) #Liste
identification[2] = '45' # Je modifie l'âge
print("Prénom:", identification[0] + '\n' + "Nom:", identification[1] + '\n' + "Âge:", identification[2])

Entrez votre prénom: alphonsine
Entrez votre nom: Chafouin
Entrez votre âge: 92

Prénom: Alphonsine
Nom: CHAFOUIN
Âge: 45

Un tuple est moins gourmand en ressources système qu’une liste.

Il a besoin de moins de mémoire et il s’exécute plus rapidement.

Opérations sur les tuples

Il n’existe pas de méthodes associées aux tuples

Les tuples sont des séquences non modifiables donc il n’est pas possible d’utiliser les méthodes remove()  ou append() par exemple.

Il n’est pas possible également d’utiliser l’opérateur [] pour insérer ou remplacer un élément :

tuple_1 = (5, 2, 25, 56)
tuple_1[2] = 23
print(tuple_1)

TypeError: ‘tuple’ object does not support item assignment.

L’instruction in

Mais il est possible d’utiliser l’instruction in pour faire un test d’appartenance

tuple_1 = (5, 2, 25, 56)
print(2 in tuple_1)

Résultat: True

La fonction intégrée len()

Il est également possible d’utiliser la fonction intégrée len() pour déterminer la longueur d’un tuple.

tuple_1 = (5, 2, 25, 56)
print(len(tuple_1))

Résultat : 4

La boucle for et la compréhension de liste

Tout comme les chaînes de caractères ou les listes, les tuples peuvent être parcourus par une boucle for ou une compréhension de liste. Dans ce dernier cas, le résultat obtenu est toujours une liste.

Concaténation et multiplication

Nous pouvons créer un nouveau tuple par concaténation ou par multiplication

tuple_1 = (5, 2, 25, 56)
tuple_2 = ("Jacky", "Hervé")
tuple_3 = tuple_1 + tuple_2
print(tuple_3)

Résultat: (5, 2, 25, 56, « Jacky », « Hervé »)

tuple_prenoms = ("Jacky", "Hervé")
tuple_prenoms = tuple_prenoms * 3
print(tuple_prenoms)

Résultat: (‘Jacky’, ‘Hervé’, ‘Jacky’, ‘Hervé’, ‘Jacky’, ‘Hervé’)

Dans ce dernier exemple, certains vont me dire: « Mais Ordinosor! Tu nous a dit qu’un tuple n’était pas modifiable et tu viens juste de modifier tuple_prenoms! »

Faux! Je n’ai appliqué aucune méthode de modification sur tuple_prenoms. J’ai seulement écrasé la valeur contenue dans la variable qui porte le nom de tuple_prenoms en lui affectant une nouvelle valeur.

Conclusion

Les tuples sont des séquences non modifiables qui s’avèrent bien utiles pour protéger en écriture des données transmises. En outre, ils sont moins gourmands en ressource système et sont traités plus rapidement.

Puisqu’il est immuable, il est possible d’utiliser un tuple comme clé de dictionnaire mais à la seule condition que le tuple ne contienne que des éléments non modifiables! Du reste, ce sera l’objet du prochain chapitre.

Auteur : Ordinosor

Bienvenue sur Miamondo, mon blog personnel. "Mia mondo", c'est de l'espéranto et ça signifie "Mon monde" en français. Je m'appelle Benoît alias Ordinosor, Français expatrié en Allemagne. Mes centres d'intérêt sont les distributions GNU/Linux, le langage de programmation Python, la science-fiction et l'espéranto.

1 réflexion sur « Python: Les tuples »

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s