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

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

Sign in and verify your email to post an answer.