Pourquoi ma valeur par défaut `def f(items=[])` garde les anciennes valeurs ?
posée 5 months ago198 vuesfr
3
def ajouter(x, items=[]):
items.append(x)
return items
print(ajouter(1)) # [1]
print(ajouter(2)) # [1, 2] ??
Pourquoi la liste n'est pas vide au deuxième appel ?
Diagnostic IA
Généré par IA. Ce n'est pas une réponse — la communauté ci-dessous le confirme ou le corrige. Vérifiez toujours avant de vous y fier.
posée 5 months ago
Stéphanie Louis 2.9k
1 réponse
8
✓✓ Réponse acceptée
Les valeurs par défaut sont évaluées une seule fois, à la définition de la fonction, pas à chaque appel. Tous les appels partagent donc la même liste.
Le motif idiomatique :
def ajouter(x, items=None):
if items is None:
items = []
items.append(x)
return items
Même règle pour {}, set() ou tout objet mutable. Les linters (Ruff, règle B006) signalent ce piège automatiquement.
Connectez-vous pour dire si ça a marché.
answered 5 months ago
Marie Louis 2.2k
Sign in and verify your email to post an answer.