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().

  • 🔑 Palabra clave Lambda: Una expresión lambda se escribe como argumentos lambda: expresión, sin definición, sin nombre y sin instrucción de retorno explícita.
  • 🧮 Expresión única: El cuerpo contiene exactamente una expresión cuyo valor se devuelve automáticamente, por lo que no se permiten sentencias ni varias líneas.
  • 🔗 Emparejamiento integrado: Las funciones lambda se suelen pasar a las funciones map(), filter(), reduce() y sorted() para transformar o seleccionar elementos en una secuencia.
  • IIFE: Se puede definir y llamar inmediatamente a una función lambda utilizando el patrón (lambda x: x + x)(2), devolviendo un resultado al instante.
  • 🇧🇷 Versus def: Las funciones regulares necesitan un nombre y pueden contener muchas instrucciones, mientras que las expresiones lambda sacrifican esa potencia a cambio de una sintaxis compacta de una sola línea.
  • 🤖 Asistencia de IA: Los asistentes de IA, como GitHub Copilot, generan expresiones lambda para mapear, filtrar y ordenar claves a partir de una breve instrucción.

Python Funciones lambda

¿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:

  1. Una función que define la operación a realizar sobre los elementos.
  2. 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:

  1. Una función que define la operación a realizar
  2. 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.

Preguntas Frecuentes

Sí. Una expresión lambda puede usar una expresión condicional como `lambda x: 'par' if x % 2 == 0 else 'impar'`. No puede contener una sentencia `if` completa, ya que el cuerpo de una expresión lambda debe ser una sola expresión y no un bloque de sentencias.

Generalmente no. PEP 8 recomienda usar def cuando una función necesita un nombre, porque vincular una lambda a una variable le da un nombre pero pierde la claridad. traceback que proporciona def. Lo mejor es pasar las expresiones lambda directamente a funciones como sorted(), map() o filter().

No. A nivel de código de bytes. Python Trata una expresión lambda y una definición equivalente de la misma manera, por lo que no hay ventaja en cuanto a velocidad. Una expresión lambda solo ahorra una línea de código; no se ejecuta más rápido que una función con nombre que realiza el mismo trabajo.

Sí. Una expresión lambda puede leer variables del ámbito que la contiene, formando un cierre. Dentro de un bucle, ten cuidado: la expresión lambda captura la variable en sí, no su valor actual, así que usa un argumento predeterminado como `lambda x, n=n: x + n` para congelarla.

Pasa una expresión lambda como argumento clave a sorted() o list.sort(). Por ejemplo, sorted(users, key=lambda u: u['age']) ordena los elementos por edad. La expresión lambda indica Python qué valor comparar para cada elemento, lo que permite una ordenación personalizada y concisa sin necesidad de una función con nombre independiente.

No directamente, ya que una expresión lambda anónima no tiene nombre al que hacer referencia. Puedes solucionar esto asignando la expresión lambda a una variable y llamando a esa variable, pero una función `def` normal es la opción más clara y recomendada para la recursión.

Las funciones Lambda potencian transformaciones rápidas y en línea en el código de IA y aprendizaje automático. Los científicos de datos las pasan a pandas .apply(), map() y filter() para limpiar o reformatear datos, y como funciones clave para ordenar características, mantenerping preprocesamiento compacto dentro de pipelines de entrenamiento más grandes.

GitHub Copilot sugiere expresiones lambda completas a partir de un comentario breve o del código circundante, incluyendo los parámetros y la expresión correctos para las llamadas a map(), filter() o sorted(). También puede proponer la conversión de una expresión lambda extensa en una función con nombre más claro cuando la legibilidad es importante.

Resumir este post con: