Cómo usar funciones Lambda en Python [With Examples]

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 se pueden usar con otras funciones integradas útiles. Al final de este tutorial, habrá aprendido a definir funciones lambda y cuándo debería considerar usarlas en lugar de las funciones regulares de Python.

¡Vamos a empezar!

Función Python Lambda: sintaxis y ejemplos

Aquí está la sintaxis general para definir una función lambda en Python:

lambda parameter(s):return value

En la sintaxis general anterior:

  • lambda es la palabra clave que debe usar para definir una función lambda, seguida de uno o más parámetros que debe tomar la función.
  • Hay dos puntos que separan los parámetros y el valor devuelto.

💡 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ás esto mejor cuando codifiquemos ejemplos.

Ejemplos de funciones Python Lambda

La mejor manera de comprender las funciones lambda es comenzar reescribiendo las funciones regulares de Python como funciones lambda.

👩🏽‍💻 Puede codificar en un REPL de Python o en el editor de Python en línea de kirukiru.es.

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

def square(num):
    return num*num

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

>>> square(9)
81
>>> square(12)
144

Puede asignar esta expresión lambda a un nombre de variable, por ejemplo, cuadrado1 para que la definición de la función sea más concisa: cuadrado1 = lambda num: num*num y luego llame 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 square(), el parámetro es num y el valor de retorno es num*num. Después de identificarlos, podemos insertarlos 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 invocada inmediatamente, donde llamamos a una función justo después de definirla.

#2. A continuación, reescribamos otra función simple add() que toma números, num1 y num2, y devuelve su suma, num1 + num2.

def add(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 devuelto es num1 + num2.

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

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

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

En las siguientes llamadas a funciones:

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

Al escribir funciones que toman valores predeterminados para ciertos parámetros como expresiones lambda, puede especificar el valor predeterminado al definir los parámetros.

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

¿Cuándo debería usar las funciones de Lambda en Python?

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

  • Cuando tiene una función cuya expresión de retorno es una sola línea de código y no necesita hacer referencia a la función en otro lugar del mismo módulo, puede usar funciones lambda. También hemos codificado algunos ejemplos para entender esto.
  • Puede usar funciones lambda cuando use funciones integradas, como map(), filter() y reduce().
  • Las funciones Lambda pueden ser útiles para clasificar estructuras de datos de Python, como listas y diccionarios.

Cómo usar Python Lambda con funciones integradas

1. Usar Lambda con map()

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

Vamos a crear una lista de números y usar la función map() para crear una nueva lista que contenga el cuadrado de cada número en la lista de números. Observe el uso de la función lambda para definir la operación de elevación al 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 de mapa, debemos incluirlo en una lista.

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

2. Usar Lambda con filtro()

Definamos nums, una lista de números:

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

Suponga que desea filtrar esta lista y conservar solo los números impares.

Puede usar la función filter() integrada de Python.

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

Para filtrar todos los números pares, conservaremos solo los números impares. Entonces, 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 sea impar, y
  • num%2!=0 es falso siempre que num sea par.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. Usar Lambda con reduce()

La función reduce() toma un iterable y una función. Reduce el iterable aplicando la función de forma iterativa en los elementos del iterable.

Para usar la función reduce(), deberá importarla desde el módulo de funciones integrado de Python:

>>> from functools import reduce

Usemos la función reduce() para calcular la suma de todos los números en la lista de números. Definimos una expresión lambda: lambda num1,num2:num1+num2, como la función de suma reductora.

La operación de reducción ocurrirá 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 en 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 Python Lambda para personalizar la clasificación

Además de usar funciones lambda con funciones integradas de Python, como map(), filter() y reduce(), también puede usarlas para personalizar las funciones integradas y los métodos que se usan para ordenar.

1. Ordenar listas de Python

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

La sintaxis para usar 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 inverso se puede establecer en Verdadero o Falso; el valor predeterminado es Falso.

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

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

>>> fruits = ['apple','pineapple','grapes','mango']

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

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

En este ejemplo:

  • La clave para ordenar es el número de ocurrencias 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 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

Considere otro ejemplo. Para el mismo criterio de clasificación, hemos redefinido la lista de frutas. Aquí, ‘p’ aparece en las cadenas ‘manzana’ y ‘uvas’ dos y una vez, respectivamente. Y nunca aparece en las cadenas ‘mango’ y ‘melon’.

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

En la lista de salida, ‘mango’ viene antes de ‘melon’ aunque ambos no tienen el carácter ‘p’. Pero ¿por qué es este el caso? La función sorted() realiza una ordenación estable; por lo tanto, cuando el recuento de ‘p’ es igual para dos cadenas, se conserva el orden de los elementos en la lista de frutas original.

Como ejercicio rápido, intercambie las posiciones de ‘mango’ y ‘melon’ en la lista de frutas, ordene la lista según el mismo criterio y observe el resultado.

▶️ Obtenga más información sobre cómo ordenar las listas de Python.

2. Ordenar un diccionario de Python

También puede usar lambdas al ordenar los diccionarios de Python. Considere el siguiente diccionario price_dict que contiene artículos y sus precios.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

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

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

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

Nos gustaría ordenar por el valor, que es el precio de cada artículo en el diccionario. En cada tupla de la lista price_dict_items, el artículo en el índice 1 es el precio. Así que configuramos la clave para lambda x:x[1] ya que usará el artículo en el índice 1, el precio, para ordenar el diccionario.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

En la salida, los elementos del diccionario se ordenaron en orden ascendente de precios: comenzando con ‘Candy’, con un precio de 3 unidades hasta ‘Honey’, con un precio de 15 unidades.

▶️ Para obtener más información, consulte esta guía detallada sobre cómo ordenar un diccionario de Python por clave y valor.

Resumiendo

¡Y ahí lo tienes! Aprendió cómo definir funciones lambda y usarlas de manera efectiva con otras funciones integradas de Python. He aquí un resumen de los puntos clave:

  • En Python, las lambdas son funciones anónimas que pueden recibir múltiples argumentos y devolver un valor; la expresión que se evaluará para generar este valor devuelto debe ser una línea de código. Se pueden usar para hacer que las definiciones de funciones pequeñas sean más concisas.
  • 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 uso con las funciones map(), filter() y reduce() y como parámetro clave para personalizar la clasificación de iterables de Python.

A continuación, aprenda cómo realizar la división de pisos en Python.