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

Pourquoi les fonctions Lambda dans les boucles Python For capturent-elles uniquement la dernière valeur ?

Linda Hamilton
Libérer: 2024-12-06 02:29:10
original
485 Les gens l'ont consulté

Why Do Lambda Functions in Python For Loops Only Capture the Last Value?

Lambda dans la boucle for ne prend que 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)
    )
Copier après la connexion

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

Alternativement, les expressions lambda peuvent être réécrites comme suit :

lambda opt=option: self.filter_records(column, opt)  # Differentiate loop variable and function parameter
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal