Maison >développement back-end >Tutoriel Python >Comment les fermetures de fonctions Lambda dans Python capturent-elles les variables ?
Fermetures de fonctions lambda : propriétés intrigantes et stratégies de capture
En Python, les fonctions lambda présentent un comportement intrigant concernant les fermetures, et comprendre leurs mécanismes est crucial pour un codage efficace. Cet article explore les questions entourant la capture de clôture et propose une approche pratique pour atteindre les résultats souhaités.
1. Que capturent les fermetures de fonctions Lambda ?
Considérez un scénario courant dans lequel les fermetures lambda sont créées dans une boucle. Chaque fermeture est conçue pour capturer la valeur de la variable de boucle actuelle. Cependant, des résultats contre-intuitifs peuvent survenir lors de l’examen des comportements de fermeture.
2. Capturer la valeur actuelle
L'essence de la capture de la valeur actuelle ne se fait pas par référence à un pointeur comme on pourrait le supposer. Au lieu de cela, les fermetures capturent un « instantané » de la variable référencée au moment de la création. Par conséquent, toute modification ultérieure de cette variable n'a aucun impact sur la valeur capturée.
3. Une solution élégante
Pour garantir que les fonctions lambda capturent la valeur actuelle prévue, envisagez d'utiliser un paramètre avec une valeur par défaut. Cette technique « force » essentiellement la capture de la valeur souhaitée. Voici une illustration :
for i in [0, 1, 2, 3]: adders[i] = lambda a, i=i: i + a
En spécifiant le paramètre i avec une valeur par défaut de i (la variable de boucle), la fermeture capture la valeur actuelle de i au moment de la création. Par conséquent, les modifications apportées à i en dehors de la fonction lambda n'affectent pas la valeur capturée, conduisant au résultat attendu.
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!