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

Susan Sarandon
Libérer: 2024-10-19 17:26:02
original
559 Les gens l'ont consulté

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

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

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!

source:php
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!