• [^] # Re: On s'en bat le steak

    Posté par . En réponse au journal Typage statique pour Python. Évalué à 4.

    Rien à voir avec la classe. On peut reproduire le problème avec juste une méthode :

    def foo(item, bar=[]):
     bar.append(item)
     return bar
    foo("coucou")
    -> ['coucou']
    foo("toto")
    -> ['coucou', 'toto']

    Les paramètres optionnels sont évalué une seule fois lors de la définition de celle-ci ensuite tu te trimbale toujours la même référence1 . Tu obtiens aussi des comportements marrants si tu fais un time.time().

    Dans le cas générale2 les valeurs par défaut des paramètres en python devraient être immuables (donc pas de structure de données que tu modifie, pas de valeur qui dépendent d'un contexte) et le reste du temps tu donne la valeur None et tu gère cette valeur dans le reste de ton code.


    1. Note : ça reproduit le comportement des variables statiques du C, mais il vaut probablement mieux utiliser les générateurs (avec yield) si tu as ce genre de besoins.

    2. c'est à dire tout le temps sauf quand tu sais pourquoi tu ne le fais pas

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)