Maison > développement back-end > Tutoriel Python > Pourquoi les appels ultérieurs à une fonction Python avec un argument par défaut mutable produisent-ils des résultats inattendus ?

Pourquoi les appels ultérieurs à une fonction Python avec un argument par défaut mutable produisent-ils des résultats inattendus ?

Barbara Streisand
Libérer: 2025-01-03 19:44:42
original
593 Les gens l'ont consulté

Why Do Subsequent Calls to a Python Function with a Mutable Default Argument Produce Unexpected Results?

Anomalie de liaison des arguments par défaut

Les arguments par défaut de Python, lorsqu'ils sont liés à la définition de la fonction au lieu de son exécution, peuvent dérouter les programmeurs. Par exemple, considérons cette fonction :

def foo(a=[]):
    a.append(5)
    return a
Copier après la connexion

Elle renvoie une liste avec un seul élément, [5], pour le premier appel. Cependant, les appels ultérieurs incrémentent ce nombre d'éléments, ce qui entraîne un modèle inattendu :

>>> foo()
[5]
>>> foo()
[5, 5]
>>> foo()
[5, 5, 5]
Copier après la connexion

Ce comportement apparemment illogique découle du concept fondamental des fonctions Python en tant qu'objets de première classe. Lors de la définition de la fonction, Python évalue la fonction et ses paramètres par défaut en tant que « données membres » de l'objet fonction. Par conséquent, ces paramètres conservent leur état lors des invocations de fonctions, tout comme les attributs de classe normaux.

Cette liaison au moment de la définition a une justification claire : elle garantit que tous les aspects de la définition de la fonction sont résolus dès le départ. Si la liaison était effectuée lors de l'exécution de la fonction, la signature de la fonction deviendrait « hybride », une partie de la liaison se produisant lors de la définition et une partie lors de l'invocation. Cette incohérence pourrait introduire des erreurs potentielles et de la confusion.

En liant les arguments par défaut lors de la définition, Python maintient l'intégrité des objets fonction en tant qu'entités immuables. Ce comportement fournit un cadre cohérent et compréhensible pour travailler avec les fonctions Python et leurs paramètres par défaut associés.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal