Maison > Article > développement back-end > Comment éviter la fermeture de variables lors de la création de boucles internes Lambdas ?
Création de lambdas dans une boucle sans fermeture de variable
Lors de la création de lambdas dans une boucle qui parcourent une liste d'objets, il est important de empêcher la fermeture variable. La fermeture d'une variable se produit lorsqu'une fonction conserve l'accès à une variable en dehors de sa portée immédiate. Cela peut conduire à un comportement inattendu, comme tous les lambdas faisant référence à la même valeur finale d'une variable.
Le problème :
Le code suivant illustre le problème :
lambdas_list = [] for obj in obj_list: lambdas_list.append(lambda: obj.some_var) for f in lambdas_list: print(f())
Lors de l'appel des lambdas dans ce code, tous les lambdas produiront le même résultat : la valeur de obj.some_var du dernier objet de obj_list. En effet, les lambdas font tous référence à la même variable obj, qui change à chaque itération de la boucle.
La solution :
Pour éviter la fermeture de la variable, nous pouvons utilisez la syntaxe lambda x=x : où x est la variable que nous voulons capturer. Cela capture une copie d'obj et la rend locale à chaque lambda :
lambdas_list = [] for obj in obj_list: lambdas_list.append(lambda obj=obj: obj.some_var) for f in lambdas_list: print(f())
Maintenant, chaque lambda fera référence au bon obj et produira la valeur attendue pour obj.some_var.
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!