Python Funciones Lambda con EJEMPLOS
โก Resumen inteligente
Funciones Lambda en Python Son funciones anรณnimas pequeรฑas definidas con la palabra clave lambda en lugar de def. Contienen una sola expresiรณn, aceptan cualquier nรบmero de argumentos y a menudo se pasan directamente a funciones integradas como map(), filter() y sorted().

ยฟEn quรฉ consiste la funciรณn Lambda? Python?
A Funciรณn Lambda en Python La programaciรณn es una funciรณn anรณnima o una funciรณn que no tiene nombre. Es una funciรณn pequeรฑa y restringida que no tiene mรกs de una lรญnea. Al igual que una funciรณn normal, una funciรณn Lambda puede tener varios argumentos con una expresiรณn.
In Python, las expresiones lambda (o formas lambda) se utilizan para construir funciones anรณnimas. Para ello utilizarรก el lambda palabra clave (tal como la usas def para definir funciones normales). Cada funciรณn anรณnima que definas en Python tendrรก 3 partes esenciales:
- La palabra clave lambda.
- Los parรกmetros (o variables vinculadas), y
- El cuerpo funcional.
Una funciรณn lambda puede tener cualquier nรบmero de parรกmetros, pero el cuerpo de la funciรณn solo puede contener uno expresiรณn. Ademรกs, una lambda se escribe en una sola lรญnea de cรณdigo y tambiรฉn se puede invocar inmediatamente. Verรก todo esto en acciรณn en los prรณximos ejemplos.
Sintaxis y ejemplos
La sintaxis formal para escribir una funciรณn lambda es la siguiente:
lambda p1, p2: expression
Aquรญ, p1 y p2 son los parรกmetros que se pasan a la funciรณn lambda. Puede agregar tantos o pocos parรกmetros como necesite.
Sin embargo, observe que no usamos corchetes alrededor de los parรกmetros como lo hacemos con las funciones regulares. La รบltima parte (expresiรณn) es cualquier valor vรกlido. Python expresiรณn que opera sobre los parรกmetros que usted proporciona a la funciรณn.
Ejemplo
Ahora que ya conoces las lambdas, probรฉmoslo con un ejemplo. Entonces, abre tu IDLE y escribe lo siguiente:
adder = lambda x, y: x + y print (adder (1, 2))
Code Explicaciรณn
Aquรญ, definimos una variable que contendrรก el resultado devuelto por la funciรณn lambda.
1. La palabra clave lambda utilizada para definir una funciรณn anรณnima.
2. xey son los parรกmetros que pasamos a la funciรณn lambda.
3. Este es el cuerpo de la funciรณn, que agrega los 2 parรกmetros que pasamos. Observe que es una expresiรณn รบnica. No se pueden escribir varias declaraciones en el cuerpo de una funciรณn lambda.
4. Llamamos a la funciรณn e imprimimos el valor devuelto.
Ejemplo
Ese fue un ejemplo bรกsico para comprender los fundamentos y la sintaxis de lambda. Ahora intentemos imprimir una lambda y veamos el resultado. Nuevamente, abre tu IDLE y escribe lo siguiente:
#What a lambda returns string='some kind of a useless lambda' print(lambda string : print(string))
Ahora guarde su archivo y presione F5 para ejecutar el programa. Este es el resultado que deberรญa obtener.
Salida:
<function <lambda> at 0x00000185C3BF81E0>
ยฟQuรฉ estรก pasando aquรญ? Analicemos el cรณdigo para comprenderlo mejor.
Code Explicaciรณn:
1. Aquรญ definimos un cadena que pasarรกs como parรกmetro a la funciรณn lambda.
2. Declaramos una funciรณn lambda que llama a una instrucciรณn print e imprime el resultado.
Pero ยฟpor quรฉ el programa no imprime la cadena que pasamos? Esto se debe a que la propia expresiรณn lambda devuelve un objeto de funciรณn. En este ejemplo, la expresiรณn lambda no estรก siendo , que son por la funciรณn de impresiรณn pero es simplemente volver El objeto de la funciรณn y la ubicaciรณn de memoria donde se almacena. Eso es lo que se imprime en la consola.
Ejemplo
Sin embargo, si escribes un programa como este:
#What a lambda returns #2 x="some kind of a useless lambda" (lambda x : print(x))(x)
Y ejecรบtalo pulsando F5, verรกs una salida como esta.
Salida:
some kind of a useless lambda
Ahora, se llama a la funciรณn lambda y la cadena que le pasamos se imprime en la consola. Pero, ยฟquรฉ es esa sintaxis extraรฑa y por quรฉ la definiciรณn de la funciรณn lambda estรก entre corchetes? Vamos a entenderlo ahora.
Code Explicaciรณn:
1. Aquรญ estรก la misma cadena que definimos en el ejemplo anterior.
2. En esta parte, definimos una funciรณn lambda y la llamamos inmediatamente pasรกndole la cadena como argumento. Esto se conoce como IIFE (ejecuciรณn automรกtica de segunda instancia), y aprenderรกs mรกs sobre ello en las siguientes secciones de este tutorial.
Ejemplo
Veamos un รบltimo ejemplo para comprender cรณmo se ejecutan las funciones lambda y las funciones regulares. Entonces, abre tu IDLE y en un nuevo archivo escribe lo siguiente:
#A REGULAR FUNCTION def guru( funct, *args ): funct( *args ) def printer_one( arg ): return print (arg) def printer_two( arg ): print(arg) #CALL A REGULAR FUNCTION guru( printer_one, 'printer 1 REGULAR CALL' ) guru( printer_two, 'printer 2 REGULAR CALL \n' ) #CALL A REGULAR FUNCTION THRU A LAMBDA guru(lambda: printer_one('printer 1 LAMBDA CALL')) guru(lambda: printer_two('printer 2 LAMBDA CALL'))
Ahora, guarda el archivo y pulsa F5 para ejecutar el programa. Si no has cometido ningรบn error, el resultado deberรญa ser similar a este.
Salida:
printer 1 REGULAR CALL printer 2 REGULAR CALL printer 1 LAMBDA CALL printer 2 LAMBDA CALL
Code Explicaciรณn:
1. Una funciรณn llamada guru que toma otra funciรณn como primer parรกmetro y cualquier otro argumento que le siga.
2. printer_one es una funciรณn simple que imprime el parรกmetro que se le pasa y lo devuelve.
3. printer_two es similar a printer_one pero sin la instrucciรณn return.
4. En esta parte, llamamos a la funciรณn guru y le pasamos las funciones de impresora y una cadena como parรกmetros.
5. Esta es la sintaxis para lograr el cuarto paso (es decir, llamar a la funciรณn guru) pero usando lambdas.
En la siguiente secciรณn, aprenderรก cรณmo utilizar funciones lambda con mapa(), reducir(), y filtrar() in Python.
Usando lambdas con Python incorporados
Las funciones Lambda proporcionan una forma elegante y poderosa de realizar operaciones utilizando mรฉtodos integrados en Python. Es posible porque las lambdas pueden invocarse inmediatamente y pasarse como argumento a estas funciones.
IIFE en Python lambda
IFE son las siglas de Invocรณ inmediatamente la ejecuciรณn de la funciรณn. Esto significa que una funciรณn lambda se puede llamar tan pronto como se define. Entendamos esto con un ejemplo; inicie su IDLE y escribe lo siguiente:
(lambda x: x + x)(2)
Aquรญ estรก el resultado y la explicaciรณn del cรณdigo:
Esta capacidad de las lambdas para ser invocadas inmediatamente le permite usarlas dentro de funciones como map() y reduce(). Es รบtil porque es posible que no desee volver a utilizar estas funciones.
lambdas en filtro()
La funciรณn de filtro se utiliza para seleccionar algunos elementos particulares de una secuencia de elementos. La secuencia puede ser cualquier iterador como listas, conjuntos, tuplas, etc.
Los elementos que se seleccionarรกn se basan en una restricciรณn predefinida. Requiere 2 parรกmetros:
- Una funciรณn que define la restricciรณn de filtrado.
- Una secuencia (cualquier iterador como listas, tuplas, etc.)
Por ejemplo,
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result))
Aquรญ estรก el resultado:
[10, 8, 7, 5, 11]
Code Explicaciรณn:
1. En la primera declaraciรณn, definimos una lista llamada secuencias que contiene algunos nรบmeros.
2. Aquรญ, declaramos una variable llamada filtered_result, que almacenarรก los valores filtrados devueltos por la funciรณn filter().
3. Una funciรณn lambda que se ejecuta en cada elemento de la lista y devuelve verdadero si es mayor que 4.
4. Imprime el resultado devuelto por la funciรณn de filtro.
lambdas en el mapa()
La funciรณn map se utiliza para aplicar una operaciรณn particular a cada elemento de una secuencia. Al igual que filter(), tambiรฉn toma 2 parรกmetros:
- Una funciรณn que define la operaciรณn a realizar sobre los elementos.
- Una o mรกs secuencias
Por ejemplo, aquรญ hay un programa que imprime los cuadrados de los nรบmeros en una lista dada:
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = map (lambda x: x*x, sequences) print(list(filtered_result))
Salida:
[100, 4, 64, 49, 25, 16, 9, 121, 0, 1]
Code Explicaciรณn:
1. Aquรญ definimos una lista llamada secuencias que contiene algunos nรบmeros.
2. Declaramos una variable llamada filtered_result que almacenarรก los valores mapeados.
3. Una funciรณn lambda que se ejecuta en cada elemento de la lista y devuelve el cuadrado de ese nรบmero.
4. Imprime el resultado devuelto por la funciรณn map.
lambdas en reducir()
La funciรณn reduce, al igual que map(), se utiliza para aplicar una operaciรณn a cada elemento de una secuencia. Sin embargo, difiere de map en su funcionamiento. Estos son los pasos que sigue la funciรณn reduce() para calcular un resultado:
Paso 1) Realizar la operaciรณn definida en los 2 primeros elementos de la secuencia.
Paso 2) Guarda este resultado.
Paso 3) Realizar la operaciรณn con el resultado guardado y el siguiente elemento de la secuencia.
Paso 4) Repita hasta que no queden mรกs elementos.
Tambiรฉn toma dos parรกmetros:
- Una funciรณn que define la operaciรณn a realizar
- Una secuencia (cualquier iterador como listas, tuplas, etc.)
Por ejemplo, aquรญ hay un programa que devuelve el producto de todos los elementos de una lista:
from functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)
Aquรญ estรก el resultado:
120
Code Explicaciรณn:
1. Importa reduce del mรณdulo functools.
2. Aquรญ definimos una lista llamada secuencias que contiene algunos nรบmeros.
3. Declaramos una variable llamada producto que almacenarรก el valor reducido.
4. Una funciรณn lambda que se ejecuta en cada elemento de la lista. Devolverรก el producto de ese nรบmero segรบn el resultado anterior.
5. Imprime el resultado devuelto por la funciรณn reduce.
ยฟPor quรฉ (y por quรฉ no) utilizar funciones lambda?
Como verรก en la siguiente secciรณn, las lambdas se tratan de la misma manera que las funciones regulares a nivel de intรฉrprete. En cierto modo, se podrรญa decir que las lambdas proporcionan una sintaxis compacta para escribir funciones que devuelven una รบnica expresiรณn.
Sin embargo, debes saber cuรกndo es una buena idea usar lambdas y cuรกndo evitarlas. En esta secciรณn, aprenderรกs algunos de los principios de diseรฑo utilizados por Python desarrolladores al escribir funciones lambda.
Uno de los casos de uso mรกs comunes para las expresiones lambda es en la programaciรณn funcional, ya que Python admite un paradigma (o estilo) de programaciรณn conocido como programaciรณn funcional.
Permite pasar una funciรณn como parรกmetro a otra funciรณn (por ejemplo, en map, filter, etc.). En estos casos, el uso de expresiones lambda ofrece una forma elegante de crear una funciรณn de un solo uso y pasarla como parรกmetro.
ยฟCuรกndo no deberรญas usar Lambda?
Nunca debe escribir funciones lambda complicadas en un entorno de producciรณn. Serรก muy difรญcil para los programadores que mantienen su cรณdigo descifrarlo. Si crea expresiones complejas de una sola lรญnea, serรญa una prรกctica mucho mejor definir una funciรณn adecuada. Como prรกctica recomendada, debe recordar que el cรณdigo simple siempre es mejor que el cรณdigo complejo.
Lambdas frente a funciones regulares
Como se indicรณ anteriormente, las lambdas son simplemente funciones que no tienen un identificador asociado. En otras palabras, son funciones sin nombre (por lo tanto, anรณnimas). Aquรญ hay una tabla para ilustrar la diferencia entre las lambdas y las funciones regulares en Python.
| lambdas | Funciones regulares |
|---|---|
Sintaxis:
lambda x : x + x
|
Sintaxis:
def (x) : return x + x |
| Las funciones lambda sรณlo pueden tener una expresiรณn en su cuerpo. | Las funciones regulares pueden tener mรบltiples expresiones y declaraciones en su cuerpo. |
| Las funciones lambda no tienen un nombre asociado. Por eso tambiรฉn se las conoce como funciones anรณnimas. | Las funciones regulares deben tener nombre y firma. |
| Lambdas no contienen una declaraciรณn de devoluciรณn porque el cuerpo se devuelve automรกticamente. | Las funciones que necesitan devolver un valor deben incluir una instrucciรณn return. |
Explicaciรณn de las diferencias.
La principal diferencia entre una funciรณn lambda y una funciรณn regular es que la funciรณn lambda evalรบa solo una expresiรณn y genera un objeto de funciรณn. En consecuencia, podemos nombrar el resultado de la funciรณn lambda y usarlo en nuestro programa como lo hicimos en el ejemplo anterior.
Una funciรณn normal para el ejemplo anterior se verรญa asรญ:
def adder (x, y): return x + y print (adder (1, 2))
Aquรญ tenemos que definir un nombre para la funciรณn que devoluciones el resultado cuando nosotros Llame Una funciรณn lambda no contiene una instrucciรณn return porque solo tendrรก una รบnica expresiรณn que siempre se devuelve por defecto. Ni siquiera es necesario asignar una lambda, ya que se puede invocar inmediatamente (vรฉase la secciรณn anterior). Como verรก, las lambdas se vuelven particularmente poderosas cuando las usamos con PythonFunciones integradas.
Sin embargo, es posible que todavรญa te preguntes en quรฉ se diferencian las lambdas de una funciรณn que devuelve una sola expresiรณn (como la anterior). A nivel de intรฉrprete no hay mucha diferencia. Puede parecer sorprendente, pero cualquier funciรณn lambda que defina en Python es tratada como una funciรณn normal por el intรฉrprete.
A nivel de cรณdigo de bytes, las dos definiciones son manejadas de la misma manera por el Python intรฉrprete. Ahora, no puedes nombrar una funciรณn lambda porque estรก reservado por Python, pero cualquier otro nombre de funciรณn producirรก el mismo cรณdigo de bytes.
