Dans le code suivant :
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) )
plusieurs lambdas sont créés et enregistrés. Ces lambdas doivent capturer différentes valeurs de l'option de variable locale. Cependant, lorsque ces lambdas sont utilisés, ils se comportent tous comme si l'option était définie sur "DEBUG", la dernière valeur qu'elle prend dans la boucle.
Ce problème survient en raison du timing d'évaluation des noms dans les corps de fonction. . Dans le code fourni, les noms sont évalués lors de l'exécution de la fonction. De ce fait, les lambdas créés dans la boucle font tous référence à la même valeur d'option au moment de l'exécution, qui est "DEBUG".
Pour contourner ce problème, la modification suivante peut être apportée :
__cMenu.add_command(label="{}".format(option), command=lambda opt=option: self.filter_records(column, opt))
En introduisant option=option comme argument de la fonction lambda, chaque lambda capture la valeur correcte de l'option au moment de la création, plutôt que de se fier à la valeur à ce moment-là. d'exécution. Cela garantit que chaque lambda fonctionne sur la valeur d'option souhaitée.
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!