¿Para qué se utilizan las expresiones Lambda? como usar
En pocas palabras, la expresión lambda mencionada en programación generalmente se usa cuando se necesita una función pero no quiere molestarse en nombrar una función, es decir, se refiere a una función anónima. La relación entre este uso y el llamado cálculo lambda (enlace Wiki en la descripción del título) es un poco como la relación entre la bomba atómica y la ecuación masa-energía. La diferencia es en realidad bastante grande.
No hablaré del cálculo lambda formal, solo hablaré de funciones anónimas con usos prácticos. Tomemos un ejemplo común de Python: eleva al cuadrado cada elemento de una lista:
map( lambda x: x*x, [y for y in range(10)])
De esta manera de escritura es mejor
def sq(x):
return x * x
map(sq, [y for y in range(10 )])
, porque este último define una función más (contaminante), especialmente si esta función sólo se utilizará una vez. Y la primera forma de escribir es en realidad más legible, porque lo que hace la función asignada a la lista es muy claro de un vistazo. Si observa detenidamente su código, encontrará que este escenario es realmente muy común: en realidad solo necesita una función en algún lugar que pueda hacer una cosa, y ni siquiera importa cuál sea su nombre. Se pueden utilizar expresiones lambda para hacer esto.
Además, una función anónima es esencialmente una función, y lo que abstrae es un conjunto de operaciones. ¿Qué quiere decir esto? Analogía
a = [1, 2, 3]
y
f = lambda x: x 1
, encontrarás , las cosas en el lado derecho del signo igual pueden existir completamente aparte de las cosas en el lado izquierdo del signo igual. El nombre en el lado izquierdo del signo igual es solo el identificador de la entidad en el lado derecho. Si puede acostumbrarse a que [1, 2, 3] exista solo, entonces no es difícil entender que lambda x: x 1 también puede existir solo. Su significado es la operación en sí de "sumar uno a un determinado número".
Ahora volvamos a mirar la función map(), que asigna una función a un tipo enumerable. Usando a y f dados arriba, puedes escribir:
map(f, a)
Es decir, la función f se aplica a cada elemento de a por turno, y el resultado se obtiene [2, 3, 4]. Ahora reemplaza f con una expresión lambda, se convierte en:
map(lambda x: x 1, [1, 2, 3])
¿Crees que ahora está muy claro? ¿Ya? Especialmente la analogía
a = [1, 2, 3]
r = []
para cada uno en a:
r .append(each 1)
Cuando lo escribes así, encontrarás que si puedes abstraer el proceso de "recorrer la lista y realizar alguna operación en cada elemento encontrado" de un bucle. un mapa de funciones y luego usa una expresión lambda para pasar esta operación como parámetro al mapa, el nivel de pensamiento será mayor y habrá menos detalles a considerar. En Python, las funciones "avanzadas" que pueden usar expresiones lambda incluyen reducir, filtrar, etc. Muchos lenguajes también tienen este tipo de herramientas (pero es mejor no usar estas características demasiado en Python. Esto es aceptable Una función que Toma una función como parámetro y se denomina "función de orden superior", que proviene de la idea de programación funcional.
En comparación con muchos otros lenguajes, la lambda de Python tiene muchas restricciones. La más grave es que solo puede consistir en una expresión. Esta restricción es principalmente para evitar el abuso, porque cuando las personas encuentran que lambda es conveniente, es más fácil abusar de él, pero usarlo demasiado hará que el programa parezca menos claro. Después de todo, todos tienen diferente tolerancia/comprensión de los niveles de abstracción.