Lambda dans la boucle For ne prend que la dernière valeur
Le problème se pose lors de l'utilisation de fonctions lambda dans une boucle for qui doit capturer des valeurs distinctes d'une variable locale. Cependant, on observe que lorsque ces lambdas sont invoqués, ils renvoient systématiquement la valeur finale attribuée à la variable locale, même si elle change au sein de la boucle.
Comprendre le problème
Ce comportement déroutant provient du timing d'évaluation des fonctions lambda. Plus précisément, les noms employés dans les corps des fonctions lambda sont évalués lorsque la fonction est exécutée, et non au moment de sa définition.
Solution
Pour résoudre ce problème, il est essentiel de capturer la valeur de la variable locale au moment de la définition de lambda, et non lorsqu'elle est invoquée. Une approche consiste à déclarer la variable que vous avez l'intention de capturer comme argument de la fonction lambda.
options = ["INFO", "WARNING", "DEBUG"] for i in range(len(options)): option = options[i] __cMenu.add_command(label="{}".format(option), command=lambda opt=option: self.filter_records(column, opt))
En définissant "option=option" avant les deux points, nous attribuons explicitement la valeur de "option" comme un argument à la fonction lambda, garantissant que chaque lambda capture la valeur prévue.
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!