Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

En este tutorial, aprenderá todo sobre las funciones lambda en Python - desde la sintaxis para definir funciones lambda hasta los diferentes casos de uso con ejemplos de código.

En Python, las lambdas son funciones anónimas que tienen una sintaxis concisa y pueden utilizarse con otras funciones incorporadas de gran ayuda. Al final de este tutorial, habrá aprendido cómo definir funciones lambda y cuándo debe considerar su uso en lugar de las funciones regulares de Python.

Comencemos

Función Lambda de Python: Sintaxis y Ejemplos

He aquí la sintaxis general para definir una función lambda en Python:

parámetro(s) lambda:valor de retorno

En la sintaxis general anterior

  • lambda es la palabra clave que debe utilizar para definir una función lambda, seguida de uno o varios parámetros que debe tomar la función.
  • Hay dos puntos separando los parámetros y el valor de retorno.

💡 Al definir una función lambda, debe asegurarse de que el valor de retorno se calcule evaluando una expresión que abarque una sola línea de código. Entenderá mejor esto cuando codifiquemos ejemplos.

Ejemplos de funciones lambda en Python

La mejor manera de entender las funciones lambda es empezar reescribiendo las funciones regulares de Python como funciones lambda.

👩🏽‍💻 Puede codificar a lo largo en un REPL de Python o en el editor de Python en línea de Geekflare.

#1. Considere la siguiente función cuadrada ()que tome un número, num, como argumento y devuelve el cuadrado del número.

def cuadrado(num):
 return num*num

Puede llamar a la función con argumentos y comprobar que funciona correctamente.

>>> cuadrado(9)
81
>>> cuadrado(12)
144

Puede asignar esta expresión lambda a un nombre de variable, digamos, cuadrado1 para que la definición de la función sea más concisa: cuadrado1 = lambda num: num*num y luego llamar a la función cuadrado1 con cualquier número como argumento. Sin embargo, sabemos que las lambdas son funciones anónimas, por lo que debe evitar asignarlas a una variable.

Para la función cuadrar (), el parámetro es num y el valor de retorno es num*num. Una vez identificados, podemos introducirlos en la expresión lambda y llamarla con un argumento, como se muestra:

>>> (lambda num: num*num)(2)
4

Este es el concepto de expresión de función inmediatamente invocada, en el que llamamos a una función justo después de definirla.

#2. A continuación, vamos a reescribir otra función sencilla add() que toma dos números, num1 y num2, y devuelve su suma, num1 num2.

def sumar(num1,num2):
 return num1 num2

Llamemos a la función add () con dos números como argumentos:

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

En este caso, num1 y num2 son los dos parámetros y el valor de retorno es num1 num2.

>>> (lambda num1, num2: num1 num2)(3,7)
10

Las funciones de Python también pueden tomar valores por defecto para los parámetros. Modifiquemos la definición de la función add() y establezcamos el valor por defecto del parámetro num2 en 10.

def add(num1, num2=10):
 return num1 num2

En las siguientes llamadas a la función:

  • En la primera llamada a la función, el valor de num1 es 1 y el valor de num2 es 3. Cuando se pasa el valor de num2 en la llamada a la función, se utiliza ese valor; la función devuelve 4.
  • Sin embargo, si sólo pasa un argumento( num1 es 7), se utiliza el valor por defecto de 10 para num2; la función devuelve 17.
>>> add(1,3)
4
>>> add(7)
17

Al escribir funciones que toman valores por defecto para determinados parámetros como expresiones lambda, puede especificar el valor por defecto al definir los parámetros.

>>> (lambda num1, num2 = 10: num1 num2)(1)
11

¿Cuándo debe utilizar funciones lambda en Python?

Ahora que ha aprendido los conceptos básicos de las funciones lambda en Python, aquí tiene algunos casos de uso:

  • Cuando tenga una función cuya expresión de retorno sea una única línea de código y no necesite hacer referencia a la función en otra parte del mismo módulo, puede utilizar funciones lambda. También hemos codificado algunos ejemplos para entender esto.
  • Puede utilizar funciones lambda cuando utilice funciones incorporadas, como map(), filter() y reduce().
  • Las funciones lambda pueden ser útiles para ordenar estructuras de datos de Python como listas y diccionarios.

Cómo utilizar lambda de Python con funciones incorporadas

#1. Uso de Lambda con map()

La función map () toma un iterable y una función y aplica la función a cada elemento del iterable, como se muestra:

python-lambda-con-mapa

Creemos una lista nums y utilizaremos la función map( ) para crear una nueva lista que contenga el cuadrado de cada número de la lista nums. Observe el uso de la función lambda para definir la operación de cuadrado.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

Como la función map( ) devuelve un objeto mapa, debemos convertirlo en una lista.

▶️ Consulte este tutorial sobre la función map() en Python.

#2. Uso de Lambda con filter()

Definamos nums, una lista de números:

>>> nums = [4,5,6,9]

Supongamos que desea filtrar esta lista y retener sólo los números impares.

Puede utilizar la función filtro ( ) incorporada en Python.

La función filter () toma una condición y un iterable: filter(condition, iterable). El resultado contiene sólo los elementos del iterable original que satisfacen la condición. Puede convertir el objeto devuelto en un iterable de Python como list.

python-lambda-con-filtro

Para filtrar todos los números pares, retendremos sólo los impares. Así que la expresión lambda debería ser lambda num: num%2!=0. La cantidad num%2 es el resto cuando num se divide por 2.

  • ¡num%2!=0 es Verdadero siempre que num mar impar, y
  • ¡num%2!=0 es Falso siempre que num mar par.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

#3. Uso de lambda con reduce()

La función reduce () toma un iterable y una función. Reduce el iterable aplicando la función iterativamente sobre los elementos del iterable.

python-lambda-con-reduce

Para utilizar la función reduce( ), tendrá que importarla desde el módulo incorporado functools de Python:

>>> from functools import reduce

Utilicemos la función reduce() para calcular la suma de todos los números de la lista nums. Definimos una expresión lambda: lambda num1,num2:num1 num2, como la función reducir suma.

La operación de reducción se producirá así: f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24. Aquí, f es la operación de suma sobre dos elementos de la lista, definida por la función lambda.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1 num2,nums)
24

Funciones lambda de Python para personalizar la ordenación

Además de utilizar funciones lambda con funciones incorporadas de Python, como map(), filter() y reducir (), también puede utilizarlas para personalizar funciones incorporadas y métodos utilizados para ordenar.

img

#1. Ordenación de listas de Python

Cuando trabaje con listas de Python, a menudo tendrá que ordenarlas basándose en ciertos criterios de ordenación. Para ordenar listas Python en su lugar, puede utilizar el método incorporado sort() sobre ellas. Si necesita una copia ordenada de la lista, puede utilizar la función sorted().

La sintaxis para utilizar la función sorted () de Python es sorted(iterable, key=...,reverse= True | False).

- El parámetro clave se utiliza para personalizar la ordenación.
- El parámetro reverse puede fijarse en True o False; el valor por defecto es False.

Al ordenar listas de números y cadenas, la ordenación por defecto es en orden ascendente y alfabético, respectivamente. Sin embargo, es posible que a veces desee definir algún criterio personalizado para la ordenación.

Considere la siguiente lista de frutas. Suponga que desea obtener una copia ordenada de la lista. Debería ordenar las cadenas según el número de apariciones de 'p' en ellas, en orden decreciente.

>>> frutas = ['manzana','piña','uvas','mango']

Es hora de utilizar el parámetro clave opcional. Una cadena es un iterable en Python y para obtener el número de ocurrencias de un carácter en ella, puede utilizar el método incorporado .count(). Así que establecemos la clave como lambda x:x.count('p') para que la ordenación se base en el número de veces que 'p' aparece en la cadena.

>>> frutas = ['manzana','piña','uva','mango']
>>> ordenada(frutas,clave=lambda x:x.count('p'),inverso=True)
['piña', 'manzana', 'uva', 'mango']

En este ejemplo:

  • La clave para ordenar es el número de apariciones del carácter 'p', y se define como una expresión lambda.
  • Como hemos establecido el parámetro inverso en True, la ordenación se produce en el orden decreciente del número de apariciones de 'p'.

En la lista de frutas, 'piña' contiene 3 apariciones de 'p', y las cadenas 'manzana', 'uvas' y 'mango' contienen 2, 1 y 0 apariciones de 'p', respectivamente.

Comprender la ordenación estable

Consideremos otro ejemplo. Para el mismo criterio de ordenación, hemos redefinido la lista de frutas. Aquí, 'p' aparece en las cadenas 'manzana' y 'uvas' dos veces y una vez, respectivamente. Y nunca aparece en las cadenas 'mango' y 'melón'.

>>> fruits = ['mango','manzana','melón','uvas']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['manzana', 'uvas', 'mango', 'melón']

En la lista de salida, 'mango' aparece antes que 'melón' a pesar de que ambos no tienen el carácter 'p'. Pero, ¿por qué ocurre esto? La función sorted( ) realiza una ordenación estable; así que cuando el recuento de 'p' es igual para dos cadenas, se conserva la ordenación de los elementos en la lista de frutas original.

Como ejercicio rápido, intercambie las posiciones de 'mango' y 'melón' en la lista de frutas, ordene la lista basándose en el mismo criterio y observe la salida.

▶️ Más información sobre la ordenación de listas en Python.

#2. Ordenar un diccionario Python

También puede utilizar lambdas para ordenar diccionarios Python. Considere el siguiente diccionario precio_dict que contiene artículos y sus precios.

>>> precio_dict = {
... 'Leche':10,
... 'Miel':15,
... 'Pan':7,
... 'Caramelo':3
... }

Para obtener los pares clave-valor de un diccionario como una lista de tuplas, puede utilizar el método incorporado en el diccionario .items():

>>> precio_dict_items = precio_dict.items()
dict_items([('Leche', 10), ('Miel', 15), ('Pan', 7), ('Caramelo', 3)])

En Python, todos los iterables: listas, tuplas, cadenas y más, siguen la indexación cero. Así, el primer elemento está en el índice 0, el segundo en el 1, y así sucesivamente.

Nos gustaría ordenar por el valor, que es el precio de cada artículo del diccionario. En cada tupla de la lista price_dict_items, el elemento en el índice 1 es el precio. Así que establecemos la clave como lambda x:x<x>[1]</x>, ya que utilizará el elemento en el índice 1, el precio, para ordenar el diccionario.

>>> dict(sorted(precio_dict_items,key=lambda x:x<x>[1]</x>))
{'Caramelo': 3, 'Pan': 7, 'Leche': 10, 'Miel': 15}

En la salida, los artículos del diccionario se han ordenado en orden ascendente de precios: empezando por 'Caramelo', con un precio de 3 unidades, hasta 'Miel', con un precio de 15 unidades.

▶️ Para saber más, consulte esta guía detallada sobre la ordenación de un diccionario Python por clave y valor.

Resumiendo

¡Y ahí lo tiene! Ha aprendido a definir funciones lambda y a utilizarlas eficazmente con otras funciones incorporadas de Python. He aquí un resumen de los puntos clave:

  • En Python, las lambdas son funciones anónimas que pueden tomar múltiples argumentos y devolver un valor; la expresión a evaluar para generar este valor de retorno debe ser una línea de código. Pueden utilizarse para hacer más concisas las definiciones de funciones pequeñas.
  • Para definir la función lambda puede utilizar la sintaxis: parámetro(s) lambda: valor de retorno.
  • Algunos de los casos de uso importantes incluyen su utilización con las funciones map(), filter() y reduce() y como parámetro clave para personalizar la ordenación de los iterables de Python.

A continuación, aprenda a realizar la división por el suelo en Python. Además, aprenda más sobre la función dormir de Python.

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder