Comprendre la capture de fermeture dans les fonctions Lambda
En Python, le comportement particulier des fermetures dans les fonctions lambda a laissé les développeurs perplexes. Cet article explore les subtilités de la capture de fermeture, expliquant exactement ce qui est capturé et comment contrôler le mécanisme de capture.
Le mécanisme de capture
Les fermetures de fonction Lambda capturent les variables de leur portée englobante. Ces variables sont effectivement gelées au moment de la création de la clôture. Dans l'exemple fourni, la fonction lambda capture la valeur de i à partir de la boucle for. Cependant, lorsque i est modifié lors des itérations de boucle suivantes, la valeur capturée reste inchangée dans les fermetures.
Contrôle de la capture
Pour capturer la valeur actuelle d'une variable, plutôt que la valeur finale, un paramètre factice peut être ajouté avec une valeur par défaut. Cette technique force la fermeture à capturer la valeur de la variable au moment de la création de la fermeture.
Dans le code modifié :
for i in [0, 1, 2, 3]: adders[i] = lambda a, i=i: i + a # dummy parameter with default value
Le paramètre factice i a une valeur par défaut de courant i dans la boucle. Par conséquent, chaque fonction lambda capture la valeur de i au moment de sa création, ce qui entraîne le comportement attendu où additionneurs[1](3) renvoie 4.
Conclusion
En comprenant le mécanisme de capture de fermeture en Python, les développeurs peuvent contrôler et manipuler efficacement les fermetures. L'utilisation de paramètres factices avec des valeurs par défaut fournit une méthode robuste pour capturer la valeur actuelle d'une variable, garantissant ainsi l'exécution correcte du code.
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!