Maison > développement back-end > Tutoriel Python > Pourquoi les fonctions Lambda dans les boucles renvoient-elles uniquement la dernière valeur ?

Pourquoi les fonctions Lambda dans les boucles renvoient-elles uniquement la dernière valeur ?

DDD
Libérer: 2024-12-13 14:36:13
original
443 Les gens l'ont consulté

Why Do Lambda Functions in Loops Only Return the Last Value?

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))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal