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