Maison >développement back-end >Tutoriel Python >Pourquoi les fonctions Lambda dans les boucles Python For capturent-elles uniquement la dernière valeur ?
Lors de l'utilisation de fonctions lambda dans une boucle for, la valeur capturée par le lambda peut ne pas être celle prévue. Ce problème survient en raison du fonctionnement du garbage collection de Python, qui entraîne la conservation de seule la dernière valeur de la variable.
Pour illustrer ce concept :
options = ["INFO", "WARNING", "DEBUG"] for i in range(len(options)): option = options[i] __cMenu.add_command( label="{}".format(option), command=lambda: self.filter_records(column, option) )
Dans ce code, chaque fonction lambda devrait capturer une valeur unique d'option, mais tout se comportera comme si l'option était définie sur "DEBUG", la valeur finale qu'elle prend dans la boucle.
Pour résoudre ce problème, comme suggéré dans la solution, chaque fonction lambda doit capturer sa propre variable. Ceci peut être réalisé en attribuant une nouvelle variable locale à l'option, comme suit :
for i in range(len(options)): opt = options[i] # Assign a new variable to capture the unique value __cMenu.add_command( label="{}".format(opt), command=lambda: self.filter_records(column, opt) )
Alternativement, les expressions lambda peuvent être réécrites comme suit :
lambda opt=option: self.filter_records(column, opt) # Differentiate loop variable and function parameter
En capturant les valeurs appropriées, Les fonctions lambda peuvent fonctionner indépendamment au sein d'une boucle, permettant d'obtenir le comportement souhaité.
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!