Pourquoi ma valeur par défaut `def f(items=[])` garde les anciennes valeurs ?
poze 5 months ago190 gadefr
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 ?
Dyagnostik IA
Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.
poze 5 months ago
Stéphanie Louis 2.9k
1 Repons
8
✓✓ Repons yo aksepte
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.
Konekte pou di lòt moun si li te mache.
answered 5 months ago
Marie Louis 2.2k
Sign in and verify your email to post an answer.