Maison >développement back-end >Tutoriel Python >Pourquoi mes fonctions Lambda dans une boucle font-elles toutes référence à la même variable ?
Lambda dans une boucle
Dans le code fourni, l'intention est de créer un dictionnaire de fonctions de commande où chaque valeur est une expression lambda qui appelle self.root.change_directory avec un nom de répertoire spécifique. Cependant, le code entraîne à tort que toutes les fonctions de commande effectuent le même changement de répertoire.
Le problème survient car les expressions lambda font référence à une seule variable, d, qui est la même pour chaque itération de la boucle. Par conséquent, toutes les expressions lambda finissent par pointer vers la dernière valeur de d.
Pour corriger cela, il faut lier une valeur unique de d à chaque expression lambda. Ceci peut être réalisé en utilisant une valeur par défaut pour le paramètre lambda, comme indiqué ci-dessous :
self.command["cd " + d] = lambda d=d: self.root.change_directory(d)
Dans ce cas, d=d crée une nouvelle liaison de d à la valeur actuelle de d pour chaque itération de la boucle. En conséquence, chaque expression lambda a sa propre référence unique à la valeur d.
Alternativement, une fermeture peut être utilisée pour obtenir le même effet :
self.command["cd " + d] = (lambda d: lambda: self.root.change_directory(d))(d)
Cette fermeture crée une nouvelle environnement pour chaque expression lambda, où d est lié à la valeur actuelle de d. Par conséquent, chaque expression lambda a accès à sa propre valeur unique de d.
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!