"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo capturar correctamente variables en funciones Lambda en bucles?

¿Cómo capturar correctamente variables en funciones Lambda en bucles?

Publicado el 2024-11-07
Navegar:698

How to Properly Capture Variables in Lambda Functions in Loops?

Captura de variables en funciones Lambda

Cuando se utilizan funciones lambda dentro de un bucle, es importante comprender el alcance de sus variables. A diferencia de las funciones regulares que copian variables locales, las funciones lambda hacen referencia a ellas.

Considere el código proporcionado:

for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))

Aquí, la función lambda captura el valor de m del alcance adjunto. Sin embargo, una vez finalizado el ciclo, m conserva el último valor ('mi'). Cuando se llama a cada función lambda, hace referencia a esta variable m compartida, lo que genera la salida "mi" varias veces.

Para superar este problema y garantizar que cada lambda capture un valor distinto de m, use una técnica llamada " argumentos predeterminados":

for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))

Al hacer de m un parámetro predeterminado con el mismo nombre, cada lambda captura su propia instancia de la variable, asegurando el resultado esperado:

"hacer"
"re"
"mi"

Declaración de liberación Este artículo se reimprime en: 1729329734 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3