Maison > développement back-end > Tutoriel Python > Pourquoi les fonctions Python Lambda capturent-elles des valeurs, pas des références, et comment cela peut-il être résolu ?

Pourquoi les fonctions Python Lambda capturent-elles des valeurs, pas des références, et comment cela peut-il être résolu ?

Barbara Streisand
Libérer: 2024-12-27 10:18:10
original
530 Les gens l'ont consulté

Why Do Python Lambda Functions Capture Values, Not References, and How Can This Be Resolved?

Comprendre les captures de fermeture dans les fonctions Lambda

Les fermetures Python capturent l'état de la portée englobante où elles sont définies. Plus précisément, elles capturent les valeurs des variables référencées dans la fonction lambda qui ne sont pas présentes dans sa portée.

Dans l'exemple fourni, les fonctions lambda capturent la variable i, à laquelle différentes valeurs sont attribuées au fur et à mesure de l'exécution de la boucle. Cependant, les fonctions lambda ne capturent pas de référence à l'objet pointé par i. Au lieu de cela, ils capturent la valeur de i au moment de leur création.

Ce comportement explique le résultat inattendu de 6 lors de l'appel des additionneurs[1](3). Malgré l'attente d'une référence à l'objet entier, la fonction lambda capture la valeur 3, qui est la valeur finale attribuée à i.

Pour obtenir le comportement souhaité consistant à préserver la valeur actuelle de i dans chaque fonction lambda , une technique appelée arguments par défaut peut être utilisée. En fournissant un argument par défaut à la fonction lambda, la valeur de i au moment de la création est verrouillée. Par exemple :

for i in [0, 1, 2, 3]:
   adders[i] = lambda a, i=i: i+a
Copier après la connexion

Dans ce cas, le paramètre i a une valeur par défaut définie sur la valeur actuelle valeur de i. Lorsque la fonction lambda est invoquée, elle utilise la valeur de i qui a été capturée lors de sa création.

Cette méthode garantit que chaque fonction lambda du tableau des additionneurs capture la valeur prévue de i, leur permettant de produire l'effet attendu. sortie lorsqu'il est invoqué.

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