Maison  >  Article  >  développement back-end  >  Pourquoi les Lambdas créés dans les boucles font-ils référence au dernier objet ?

Pourquoi les Lambdas créés dans les boucles font-ils référence au dernier objet ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-08 17:38:02505parcourir

Why Do Lambdas Created in Loops Reference the Last Object?

Personnalisation de la création Lambda dans des boucles

Lorsque vous travaillez avec des listes d'objets et tentez de créer des lambdas dans une boucle qui accèdent aux attributs d'objet, vous pouvez rencontrez un problème où tous les lambdas font référence au dernier objet de la liste.

Pour résoudre ce problème, la clé est de capturer la référence d'objet correcte pour chaque lambda. L'extrait de code suivant fournit une solution améliorée :

lambdas_list = []
for obj in obj_list:
    lambdas_list.append(lambda obj=obj: obj.some_var)

En définissant obj=obj comme argument de mot-clé dans la fonction lambda, vous créez une nouvelle portée pour obj à chaque itération. Cela garantit que chaque lambda capture la référence d'objet correcte, l'isolant des changements dans les itérations de boucle ultérieures.

Par conséquent, lorsque vous parcourez la lambdas_list et appelez chaque fonction, vous obtiendrez les résultats attendus pour chaque objet. dans la obj_list. Cette méthode résout efficacement le problème de tous les lambdas faisant référence au dernier objet de la liste et fournit une solution plus robuste et pythonique.

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!

Déclaration:
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