Vous pouvez définir la valeur par défaut de l'argument dans la définition de fonction
def foo(bar=[]):
bar.append('baz')
return bar
Lancer foo ()
retourne la liste ['baz']
>>> foo()
['baz']
Et si nous exécutions à nouveau le même code?
>>> foo()
['baz', 'baz']
Le résultat a changé. La raison en est que Python évalue uniquement la valeur par défaut d'une fonction la première fois. Et la liste Python est modifiable, et ʻappend () `ajoute des arguments destructeurs à la liste, ce qui entraîne des résultats inattendus lors de la deuxième exécution. ..
Pour résoudre ce problème, définissez un objet immuable par défaut. Dans le cas de la fonction foo
cette fois
def foo(bar=None):
if bar is None:
bar = []
bar.append('baz')
return bar
Faire. Peu importe le nombre de fois que cette fonction est appelée sans argument, None est immuable, donc elle renvoie le même résultat à chaque fois.
>>> foo()
['baz']
>>> foo()
['baz']
En Python, str est immuable, donc utiliser une chaîne comme valeur par défaut est très bien.
Recommended Posts