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
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]
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!