Maison  >  Article  >  développement back-end  >  Comment capturer correctement les variables dans les fonctions Lambda dans les boucles ?

Comment capturer correctement les variables dans les fonctions Lambda dans les boucles ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-19 17:26:02560parcourir

How to Properly Capture Variables in Lambda Functions in Loops?

Capture de variables dans les fonctions Lambda

Lors de l'utilisation de fonctions lambda dans une boucle, il est important de comprendre la portée de leurs variables. Contrairement aux fonctions normales qui copient les variables locales, les fonctions lambda y font référence.

Considérez le code donné :

<code class="python">for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))</code>

Ici, la fonction lambda capture la valeur de m à partir de la portée englobante. Cependant, une fois la boucle terminée, m conserve la dernière valeur (« mi »). Lorsque chaque fonction lambda est appelée, elle fait référence à cette variable m partagée, ce qui entraîne la sortie « mi » plusieurs fois.

Pour surmonter ce problème et garantir que chaque lambda capture une valeur distincte de m, utilisez une technique appelée " arguments par défaut":

<code class="python">for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))</code>

En faisant de m un paramètre par défaut portant le même nom, chaque lambda capture sa propre instance de la variable, garantissant le résultat attendu :

"do"
"ré"
"mi"

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