Méthode append et ajouts
I. La méthode append⚓︎
Exercice
1. Exécuter le script ci-dessous. Que se passe-t-il ?
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Solution
appendest une méthode qui modifie la liste mais ne renvoie rien (soit None) donc ma_liste.append(1) est une expression qui vaut None. La fonction ajoute_6 renvoit donc None, qui est affecté à resultats.
2. Exécuter le script ci-dessous. Que se passe-t-il ?
###(Dés-)Active le code après la ligne
(Ctrl+I)
# Tests (insensible à la casse)(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
II. L'opérateur +=⚓︎
Cas des nombres ou des chaînes de caractères
Pour les nombres, les chaînes de caractères ou les tuples : s = s + v est équivalent à s += v
Code 1
Exécuter le script ci-dessous.
###(Dés-)Active le code après la ligne
(Ctrl+I)
# Tests (insensible à la casse)(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Code 2
Exécuter le script ci-dessous.
###(Dés-)Active le code après la ligne
(Ctrl+I)
# Tests (insensible à la casse)(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Cas des listes
ma_liste += [4]se comporte commema_liste.append(4). L'opérateur+=modifie la liste en placema_liste = ma_liste + [4]crée une nouvelle liste qui est le résultat de la concaténation dema_listeet[4]. La liste originale n'est pas modifiée en place.- Remarquons que
ma_liste += [4, 5, 6]est l'équivalent dema_liste.extend([4, 5, 6]). La listema_listeest aussi modifiée en place.
Doncma_liste += [4]est équivalent àma_liste.extend([4])
Que se passe-t-il dans le Code 1 et dans le Code 2 ?
👉 Dans le Code 1
ma_liste = [1, 2, 3]: Une liste est créée avec les éléments[1, 2, 3].- Appel de la fonction
ajouter_element. La fonction est appelée avecma_listecomme argument :ajouter_element(ma_liste):. - Modification de la liste dans la fonction :
ma_liste = ma_liste + [4]: Cette ligne crée une nouvelle liste qui est le résultat de la concaténation dema_listeet[4]. La nouvelle liste[1, 2, 3, 4]est assignée à la variable localema_listeà l'intérieur de la fonction. Cette opération ne modifie pas la liste originale passée en argument, mais crée une nouvelle liste locale à la fonction. print(ma_liste): La liste originalema_listen'a pas été modifiée par la fonctionajouter_element, donc il s'affiche[1, 2, 3].
👉 Dans le Code 2
ma_liste = [1, 2, 3]: Une liste est créée avec les éléments[1, 2, 3].- Appel de la fonction
ajouter_element. La fonction est appelée avecma_listecomme argument :ajouter_element(ma_liste): - Modification de la liste dans la fonction :
ma_liste += [4]: Cette ligne utilise l'opérateur+=pour ajouter[4]àma_listece qui modifie la liste en place. - Les listes sont des objets mutables et la méthode
appendopère une mutation de la liste sans en créer une nouvelle. Or la variable locale et la variable globale désignent la même liste. La différence dans le code 1 est que la variable locale et la globale désignent aussi la même liste au début, mais après l’affectionliste = liste + [4], la variable locale désigne une autre liste. print(ma_liste): Après l'appel de la fonctionajouter_element,ma_listea été modifiée pour inclure l'élément4, donc il s'affiche[1, 2, 3, 4].
Bonne pratique
- Il vaut mieux utiliser les méthodes
appendouextendpour modifier une liste en place, l'opérateur+pour créer une nouvelle liste. - Il vaut mieux éviter d'utiliser l'opérateur
+=avec des listes.
Crédits⚓︎
Avec l'aide judicieuse de Serge Bays et de Frédéric Zinelli.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)