Exercices Architecture & Patterns Le piege du paramètre mutable par défaut
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Le piege du paramètre mutable par défaut

C'est probablement le piege le plus celebre de Python. Quand tu donnes une valeur par défaut mutable (comme une liste) a un paramètre de fonction, cette valeur est créée UNE SEULE FOIS, au moment ou Python lit la definition de la fonction. Pas a chaque appel.

Résultat : tous les appels qui utilisent la valeur par défaut partagent le meme objet.

def ajouter(élément, liste=[]):
liste.append(élément)
return liste

print(ajouter('a')) # ['a']
print(ajouter('b')) # ['a', 'b'] -- la meme liste !

La solution classique : utiliser None comme valeur par défaut, puis créer la liste dans le corps de la fonction si besoin.

Écris une fonction créer_equipe(nom, membres=None) qui crée un dictionnaire representant une equipe. Si aucune liste de membres n'est fournie, utilise une liste vide. La fonction doit renvoyer {'nom': nom, 'membres': membres, 'taille': len(membres)}.

Le piege a eviter : si deux appels sans membres partagent la meme liste, ajouter un membre a l'une affecterait l'autre.

Exemple :
créer_equipe('Alpha') renvoie {'nom': 'Alpha', 'membres': [], 'taille': 0}
créer_equipe('Beta', ['Alice']) renvoie {'nom': 'Beta', 'membres': ['Alice'], 'taille': 1}

Tests (4/4)

Sans membres
assert créer_equipe('Alpha') == {'nom': 'Alpha', 'membres': [], 'taille': 0}
Avec membres
assert créer_equipe('Beta', ['Alice']) == {'nom': 'Beta', 'membres': ['Alice'], 'taille': 1}
Listes independantes
e1 = créer_equipe('A')
e2 = créer_equipe('B')
e1['membres'].append('X')
assert e2['membres'] == []
Taille calculée
assert créer_equipe('C', ['a', 'b', 'c'])['taille'] == 3

Indices (3 disponibles)

solution.py