Maison > développement back-end > Tutoriel Python > Pourquoi les Lambdas dans les boucles dans l'état de partage Python ?

Pourquoi les Lambdas dans les boucles dans l'état de partage Python ?

Patricia Arquette
Libérer: 2024-11-18 05:53:02
original
326 Les gens l'ont consulté

Why Do Lambdas Within Loops in Python Share State?

Lambdas dans les boucles : adressage de l'état partagé

En Python, les lambdas créés dans une boucle peuvent présenter un comportement inattendu en raison de l'état partagé. À titre d'exemple, considérons le code suivant qui vise à créer des lambdas qui accèdent à la propriété d'un objet :

lambdas_list = []
for obj in obj_list:
   lambdas_list.append(lambda : obj.some_var)
Copier après la connexion

Cependant, lors de l'itération et de l'appel de ces lambdas, la valeur de la propriété du dernier objet est toujours obtenue :

for f in lambdas_list:
    print(f())
Copier après la connexion
Copier après la connexion

Pour remédier à cette limitation, une simple modification peut être apportée :

lambdas_list.append(lambda obj=obj: obj.some_var)
Copier après la connexion

En fournissant un argument par défaut au lambda, la valeur actuelle de l'objet est capturée au moment de la création. Cela garantit que chaque lambda conserve son propre état et que les résultats souhaités sont obtenus :

for f in lambdas_list:
    print(f())
Copier après la connexion
Copier après la connexion

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 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