Maison > développement back-end > Tutoriel Python > Comment puis-je éviter un comportement inattendu avec des arguments par défaut mutables en Python ?

Comment puis-je éviter un comportement inattendu avec des arguments par défaut mutables en Python ?

DDD
Libérer: 2024-12-10 15:03:10
original
670 Les gens l'ont consulté

How Can I Avoid Unexpected Behavior with Mutable Default Arguments in Python?

Éviter les pièges des paramètres par défaut dans la liaison précoce de Python

Lors de l'utilisation des paramètres par défaut dans Python, il est essentiel d'être conscient de la liaison précoce comportement, ce qui peut conduire à des résultats inattendus, en particulier avec des arguments par défaut mutables. Cet article résout ce problème et propose une solution pour créer une fonction qui utilise systématiquement une nouvelle liste vide comme paramètre par défaut.

Le problème

Considérez ce qui suit function :

def my_func(working_list=[]):
    working_list.append("a")
    print(working_list)
Copier après la connexion

Lorsque cette fonction est appelée pour la première fois sans argument explicite, Python crée une nouvelle liste vide comme valeur par défaut pour liste_de travail. Cependant, les appels ultérieurs sans argument explicite utiliseront la même liste créée lors de l'appel initial, ce qui entraînera des mises à jour cumulatives de la liste.

La solution

Pour Pour éviter ce comportement, l'approche recommandée consiste à utiliser None comme paramètre par défaut et à le tester explicitement dans le corps de la fonction. Ceci peut être réalisé comme suit :

def my_func(working_list=None):
    if working_list is None: 
        working_list = []

    # alternative:
    # working_list = [] if working_list is None else working_list

    working_list.append("a")
    print(working_list)
Copier après la connexion

En définissant le paramètre par défaut sur Aucun, une nouvelle liste vide sera créée à chaque fois que la fonction est appelée sans argument explicite.

< h3>Considérations supplémentaires

La documentation Python recommande d'utiliser is None pour les comparaisons avec None. C'est le style préféré selon PEP 8, qui déconseille d'utiliser des opérateurs d'égalité (== et !=) pour les comparaisons avec des singletons comme None.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal