Introducción
En el mundo de la programación en Python, las funciones en línea ofrecen una forma poderosa y concisa de crear funciones pequeñas, de una sola expresión, sin la necesidad de una definición formal de función. Estas funciones en línea, conocidas como funciones lambda en Python, son particularmente útiles para operaciones simples y técnicas de programación funcional. Este tutorial le guiará a través de la creación y el uso de funciones lambda para escribir código Python más elegante y eficiente.
Comprender los Fundamentos de las Funciones Lambda
¿Qué son las Funciones Lambda?
En Python, las funciones lambda son funciones pequeñas y anónimas definidas usando la palabra clave lambda en lugar de la declaración estándar def. Se llaman "anónimas" porque no requieren un nombre como las funciones tradicionales.
La sintaxis básica para una función lambda es:
lambda argumentos: expresión
Las funciones lambda se limitan a una sola expresión y devuelven automáticamente el resultado de esa expresión.
Creando tu Primera Función Lambda
Creemos y probemos algunas funciones lambda simples:
Abre un nuevo archivo Python en tu editor de código. Haz clic en "Archivo" > "Nuevo Archivo" en el WebIDE y guárdalo como
lambda_basics.pyen el directorio/home/labex/project.Añade el siguiente código para crear tu primera función lambda:
## Una función lambda simple que eleva un número al cuadrado
square = lambda x: x * x
## Probando la función lambda
result = square(5)
print(f"El cuadrado de 5 es: {result}")
- Ejecuta tu código abriendo una terminal (si aún no está abierta) y ejecutando:
python3 ~/project/lambda_basics.py
Deberías ver la salida:
El cuadrado de 5 es: 25
Funciones Lambda vs. Funciones Regulares
Comparemos las funciones lambda con sus funciones regulares equivalentes:
- Añade el siguiente código a tu archivo
lambda_basics.py:
## Función regular que suma dos números
def add_regular(a, b):
return a + b
## Función lambda equivalente
add_lambda = lambda a, b: a + b
## Probando ambas funciones
print(f"Función regular: 3 + 5 = {add_regular(3, 5)}")
print(f"Función lambda: 3 + 5 = {add_lambda(3, 5)}")
- Ejecuta tu código de nuevo:
python3 ~/project/lambda_basics.py
Ahora deberías ver:
El cuadrado de 5 es: 25
Función regular: 3 + 5 = 8
Función lambda: 3 + 5 = 8
Cuándo Usar Funciones Lambda
Las funciones lambda son más útiles cuando:
- Necesitas una función simple por un corto período de tiempo
- La lógica de la función se puede expresar en una sola línea
- Quieres pasar una función como argumento a otra función
Creemos un ejemplo más con múltiples parámetros:
- Añade el siguiente código a tu archivo
lambda_basics.py:
## Función lambda con múltiples parámetros
calculate = lambda x, y, z: x * y + z
## Probando con diferentes valores
result1 = calculate(2, 3, 4)
result2 = calculate(5, 2, 1)
print(f"2 * 3 + 4 = {result1}")
print(f"5 * 2 + 1 = {result2}")
- Ejecuta tu código actualizado:
python3 ~/project/lambda_basics.py
Deberías ver una salida adicional:
2 * 3 + 4 = 10
5 * 2 + 1 = 11
Resumen de los Fundamentos de Lambda
Las funciones lambda son ideales para crear funciones simples de una línea. Proporcionan una forma concisa de escribir código cuando no necesitas una definición completa de función. En el siguiente paso, exploraremos cómo usar funciones lambda con las funciones integradas de Python para operaciones más potentes.
Usando Lambda con Funciones Integradas
Las funciones lambda se vuelven particularmente poderosas cuando se combinan con las funciones integradas de Python como map(), filter() y sorted(). Estas combinaciones te permiten escribir código eficiente para la transformación y manipulación de datos.
La Función map() con Lambda
La función map() aplica una función dada a cada elemento de un iterable (como una lista) y devuelve un objeto map con los resultados.
Crea un nuevo archivo llamado
lambda_builtin.pyen el directorio/home/labex/project.Añade el siguiente código para demostrar el uso de
map()con lambda:
## Usando map() con una función lambda para elevar al cuadrado cada número en una lista
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print("Números originales:", numbers)
print("Números al cuadrado:", squared_numbers)
- Ejecuta tu código:
python3 ~/project/lambda_builtin.py
Deberías ver:
Números originales: [1, 2, 3, 4, 5]
Números al cuadrado: [1, 4, 9, 16, 25]
La Función filter() con Lambda
La función filter() crea un nuevo iterable con elementos que satisfacen una condición (la función devuelve True).
- Añade el siguiente código a tu archivo
lambda_builtin.py:
## Usando filter() con una función lambda para encontrar números pares
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print("Todos los números:", numbers)
print("Números pares:", even_numbers)
## Usando filter() para encontrar nombres que comienzan con 'J'
names = ["Alice", "Bob", "John", "Jane", "Michael", "Jessica"]
j_names = list(filter(lambda name: name.startswith('J'), names))
print("Todos los nombres:", names)
print("Nombres que comienzan con J:", j_names)
- Ejecuta tu código actualizado:
python3 ~/project/lambda_builtin.py
Deberías ver una salida adicional:
Todos los números: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Números pares: [2, 4, 6, 8, 10]
Todos los nombres: ['Alice', 'Bob', 'John', 'Jane', 'Michael', 'Jessica']
Nombres que comienzan con J: ['John', 'Jane', 'Jessica']
La Función sorted() con Lambda
La función sorted() te permite ordenar iterables usando una función clave (key) personalizada, que es donde las funciones lambda son muy útiles.
- Añade el siguiente código a tu archivo
lambda_builtin.py:
## Usando sorted() con lambda para ordenar por el segundo elemento de las tuplas
pairs = [(1, 5), (3, 2), (5, 7), (2, 9), (4, 1)]
sorted_by_second = sorted(pairs, key=lambda pair: pair[1])
print("Pares originales:", pairs)
print("Ordenado por el segundo elemento:", sorted_by_second)
## Usando sorted() con lambda para ordenar cadenas por longitud
words = ["apple", "banana", "cherry", "date", "elderberry", "fig"]
sorted_by_length = sorted(words, key=lambda word: len(word))
print("Palabras originales:", words)
print("Ordenado por longitud:", sorted_by_length)
- Ejecuta tu código actualizado:
python3 ~/project/lambda_builtin.py
Deberías ver una salida adicional:
Pares originales: [(1, 5), (3, 2), (5, 7), (2, 9), (4, 1)]
Ordenado por el segundo elemento: [(4, 1), (3, 2), (1, 5), (5, 7), (2, 9)]
Palabras originales: ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig']
Ordenado por longitud: ['fig', 'date', 'apple', 'cherry', 'banana', 'elderberry']
Combinando Múltiples Funciones Lambda
También puedes encadenar o combinar múltiples operaciones usando funciones lambda:
- Añade el siguiente código a tu archivo
lambda_builtin.py:
## Combinando map y filter con funciones lambda
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
## Primero eleva al cuadrado los números, luego filtra los valores mayores que 20
result = list(filter(lambda x: x > 20, map(lambda x: x**2, numbers)))
print("Números originales:", numbers)
print("Números al cuadrado > 20:", result)
- Ejecuta tu código actualizado:
python3 ~/project/lambda_builtin.py
Deberías ver una salida adicional:
Números originales: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Números al cuadrado > 20: [25, 36, 49, 64, 81, 100]
Las funciones lambda con funciones integradas como map(), filter() y sorted() proporcionan una forma poderosa de procesar datos con un código mínimo. En el siguiente paso, exploraremos aplicaciones más prácticas de las funciones lambda.
Aplicaciones Prácticas de Funciones Lambda
En este paso, exploraremos algunas aplicaciones prácticas de las funciones lambda, incluyendo su uso con lógica condicional y cómo utilizarlas en escenarios del mundo real.
Funciones Lambda con Expresiones Condicionales
Las funciones lambda pueden incluir expresiones condicionales utilizando la sintaxis del operador ternario de Python: x if condición else y.
Crea un nuevo archivo llamado
lambda_practical.pyen el directorio/home/labex/project.Agrega el siguiente código para demostrar funciones lambda condicionales:
## Función lambda con expresión condicional
get_status = lambda score: "Aprobado" if score >= 60 else "Reprobado"
## Prueba la función con diferentes puntuaciones
scores = [45, 90, 60, 30, 75]
for score in scores:
status = get_status(score)
print(f"Puntuación: {score}, Estado: {status}")
- Ejecuta tu código:
python3 ~/project/lambda_practical.py
Debes ver:
Puntuación: 45, Estado: Reprobado
Puntuación: 90, Estado: Aprobado
Puntuación: 60, Estado: Aprobado
Puntuación: 30, Estado: Reprobado
Puntuación: 75, Estado: Aprobado
Creación de una Calculadora Simple con Funciones Lambda
Las funciones lambda son perfectas para crear funciones de utilidad simples como una calculadora:
- Agrega el siguiente código a tu archivo
lambda_practical.py:
## Creando una calculadora usando funciones lambda
operations = {
'sumar': lambda x, y: x + y,
'restar': lambda x, y: x - y,
'multiplicar': lambda x, y: x * y,
'dividir': lambda x, y: x / y if y != 0 else "No se puede dividir por cero"
}
## Prueba la calculadora
a, b = 10, 2
for operation, func in operations.items():
result = func(a, b)
print(f"{a} {operation} {b} = {result}")
## Prueba la división por cero
print(f"10 dividir 0 = {operations['dividir'](10, 0)}")
- Ejecuta tu código:
python3 ~/project/lambda_practical.py
Debes ver una salida adicional:
10 sumar 2 = 12
10 restar 2 = 8
10 multiplicar 2 = 20
10 dividir 2 = 5.0
10 dividir 0 = No se puede dividir por cero
Transformación de Datos con Funciones Lambda
Las funciones lambda son excelentes para transformar estructuras de datos:
- Agrega el siguiente código a tu archivo
lambda_practical.py:
## Procesando una lista de diccionarios con funciones lambda
empleados = [
{'nombre': 'Alice', 'salario': 90000, 'departamento': 'Ingeniería'},
{'nombre': 'Bob', 'salario': 75000, 'departamento': 'Marketing'},
{'nombre': 'Charlie', 'salario': 60000, 'departamento': 'Ingeniería'},
{'nombre': 'David', 'salario': 85000, 'departamento': 'RRHH'},
{'nombre': 'Eve', 'salario': 120000, 'departamento': 'Ingeniería'}
]
## Encuentra empleados de ingeniería y ordénalos por salario
empleados_ingenieria = sorted(
filter(lambda emp: emp['departamento'] == 'Ingeniería', empleados),
key=lambda emp: emp['salario'],
reverse=True
)
print("Empleados de Ingeniería (mayor salario primero):")
for empleado in empleados_ingenieria:
print(f" {empleado['nombre']}: ${empleado['salario']}")
## Calcula el salario promedio
salario_promedio = sum(map(lambda emp: emp['salario'], empleados)) / len(empleados)
print(f"\nSalario promedio: ${salario_promedio:.2f}")
## Encuentra empleados con salario superior al promedio
por_encima_promedio = list(filter(lambda emp: emp['salario'] > salario_promedio, empleados))
print(f"\nEmpleados con salario superior al promedio:")
for empleado in por_encima_promedio:
print(f" {empleado['nombre']}: ${empleado['salario']} ({empleado['departamento']})")
- Ejecuta tu código actualizado:
python3 ~/project/lambda_practical.py
Debes ver una salida adicional:
Empleados de Ingeniería (mayor salario primero):
Eve: $120000
Alice: $90000
Charlie: $60000
Salario promedio: $86000.00
Empleados con salario superior al promedio:
Alice: $90000 (Ingeniería)
Eve: $120000 (Ingeniería)
Funciones Lambda como Manejadores de Eventos con Tkinter
Las funciones lambda se utilizan comúnmente como manejadores de eventos en aplicaciones GUI. Creemos una simple aplicación Tkinter para demostrarlo:
- Agrega el siguiente código a un nuevo archivo llamado
lambda_gui.pyen el directorio/home/labex/project:
sudo apt update
sudo apt install python3-tk -y
import tkinter as tk
## Crea una calculadora GUI simple
def create_calculator():
## Crea la ventana principal
window = tk.Tk()
window.title("Calculadora Lambda")
window.geometry("300x200")
## Crea campos de entrada
## ... (código omitido para concisión)
## Crea el frame de botones
button_frame = tk.Frame(window)
button_frame.pack(pady=10)
## Crea botones de operación usando funciones lambda
operations = ['+', '-', '*', '/']
for op in operations:
## Usando lambda para manejadores de clics de botón
## Usa un parámetro por defecto para evitar problemas de enlace tardío
button = tk.Button(
button_frame,
text=op,
width=3,
command=lambda op=op: calculate(op, num1_entry, num2_entry, result_label)
)
button.pack(side=tk.LEFT, padx=5)
window.mainloop()
def calculate(operation, num1_entry, num2_entry, result_label):
## ... (código omitido para concisión)
## Código principal para ejecutar la calculadora
if __name__ == "__main__":
create_calculator()
- Ejecuta el código en LabEx Desktop Interface, ya que Tkinter es una biblioteca GUI y no se puede ejecutar en la terminal de VS Code.
python3 ~/project/lambda_gui.py

Ahora has visto cómo se pueden aplicar las funciones lambda en varios escenarios prácticos, desde el procesamiento simple de datos hasta aplicaciones más complejas como GUIs y transformación de datos.
Técnicas Avanzadas con Lambda
En este paso final, exploraremos algunas técnicas avanzadas usando funciones lambda, incluyendo lambdas anidadas, cierres (closures) y funciones de orden superior.
Devolviendo Funciones Lambda desde Funciones
Las funciones lambda pueden ser creadas y devueltas desde otras funciones, permitiendo la creación dinámica de funciones:
Crea un nuevo archivo llamado
lambda_advanced.pyen el directorio/home/labex/project.Añade el siguiente código:
## Función que devuelve una función lambda
def create_multiplier(factor):
"""Devuelve una función que multiplica su entrada por el factor dado."""
return lambda x: x * factor
## Crea funciones multiplicadoras específicas
double = create_multiplier(2)
triple = create_multiplier(3)
quadruple = create_multiplier(4)
## Prueba las funciones multiplicadoras
number = 10
print(f"Número original: {number}")
print(f"Doble: {double(number)}")
print(f"Triple: {triple(number)}")
print(f"Cuádruple: {quadruple(number)}")
- Ejecuta tu código:
python3 ~/project/lambda_advanced.py
Deberías ver:
Número original: 10
Doble: 20
Triple: 30
Cuádruple: 40
Composición de Funciones con Lambda
Podemos componer funciones usando lambda para crear una tubería (pipeline) de operaciones:
- Añade el siguiente código a tu archivo
lambda_advanced.py:
## Composición de funciones usando lambda
def compose(f, g):
"""Devuelve una función que aplica f después de g."""
return lambda x: f(g(x))
## Crea funciones componentes
square = lambda x: x * x
increment = lambda x: x + 1
decrement = lambda x: x - 1
## Crea funciones compuestas
square_then_increment = compose(increment, square)
increment_then_square = compose(square, increment)
complex_operation = compose(square, compose(increment, square))
## Prueba las funciones compuestas
value = 5
print(f"\nValor original: {value}")
print(f"square_then_increment: {square_then_increment(value)}") ## (5² = 25) + 1 = 26
print(f"increment_then_square: {increment_then_square(value)}") ## (5 + 1)² = 36
print(f"complex_operation: {complex_operation(value)}") ## ((5² = 25) + 1)² = 676
- Ejecuta tu código actualizado:
python3 ~/project/lambda_advanced.py
Deberías ver una salida adicional:
Valor original: 5
square_then_increment: 26
increment_then_square: 36
complex_operation: 676
Funciones Lambda Recursivas
Crear funciones lambda recursivas verdaderas es un desafío en Python debido a la forma en que se definen las lambdas. Sin embargo, podemos usar un truco con el Y combinator para crear funciones lambda recursivas:
- Añade el siguiente código a tu archivo
lambda_advanced.py:
## Y combinator para crear funciones lambda recursivas
Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
## Creando una función factorial recursiva usando lambda y el Y combinator
factorial = Y(lambda f: lambda n: 1 if n <= 0 else n * f(n - 1))
## Prueba la función factorial recursiva
for i in range(6):
print(f"factorial({i}) = {factorial(i)}")
## Creando una función Fibonacci recursiva usando lambda y el Y combinator
fibonacci = Y(lambda f: lambda n: n if n <= 1 else f(n-1) + f(n-2))
## Prueba la función Fibonacci recursiva
print("\nSecuencia de Fibonacci:")
for i in range(10):
print(f"fibonacci({i}) = {fibonacci(i)}")
- Ejecuta tu código actualizado:
python3 ~/project/lambda_advanced.py
Deberías ver una salida adicional:
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
Secuencia de Fibonacci:
fibonacci(0) = 0
fibonacci(1) = 1
fibonacci(2) = 1
fibonacci(3) = 2
fibonacci(4) = 3
fibonacci(5) = 5
fibonacci(6) = 8
fibonacci(7) = 13
fibonacci(8) = 21
fibonacci(9) = 34
Lambda con Aplicación Parcial de Funciones
La aplicación parcial de funciones te permite crear nuevas funciones pre-llenando algunos argumentos de funciones existentes:
- Añade el siguiente código a tu archivo
lambda_advanced.py:
from functools import partial
## Función original con múltiples parámetros
def power(base, exponent):
return base ** exponent
## Creando funciones especializadas usando partial y lambda
square = partial(power, exponent=2)
cube = partial(power, exponent=3)
## Enfoque alternativo usando lambda
square_lambda = lambda x: power(x, 2)
cube_lambda = lambda x: power(x, 3)
## Prueba ambos enfoques
number = 4
print(f"\nNúmero original: {number}")
print(f"square (partial): {square(number)}")
print(f"cube (partial): {cube(number)}")
print(f"square (lambda): {square_lambda(number)}")
print(f"cube (lambda): {cube_lambda(number)}")
## Aplicación parcial con múltiples argumentos pre-llenados
def format_string(prefix, content, suffix):
return f"{prefix}{content}{suffix}"
## Crea formateadores especializados
html_paragraph = partial(format_string, "<p>", suffix="</p>")
html_div = partial(format_string, "<div>", suffix="</div>")
## Prueba los formateadores especializados
content = "Hola, Mundo!"
print(f"\nContenido original: {content}")
print(f"Párrafo HTML: {html_paragraph(content)}")
print(f"Div HTML: {html_div(content)}")
- Ejecuta tu código actualizado:
python3 ~/project/lambda_advanced.py
Deberías ver una salida adicional:
Número original: 4
square (partial): 16
cube (partial): 64
square (lambda): 16
cube (lambda): 64
Contenido original: Hola, Mundo!
Párrafo HTML: <p>Hola, Mundo!</p>
Div HTML: <div>Hola, Mundo!</div>
Estas técnicas avanzadas muestran la flexibilidad y el poder de las funciones lambda en Python. Al combinar funciones lambda con funciones de orden superior, composición funcional y aplicación parcial, puedes crear soluciones concisas y elegantes a problemas complejos.
Resumen
En este laboratorio, has aprendido a crear y usar funciones en línea (funciones lambda) en Python, progresando desde conceptos básicos hasta técnicas avanzadas.
Esto es lo que has logrado:
Funciones Lambda Básicas - Aprendiste la sintaxis y el uso básico de las funciones lambda, las comparaste con las funciones regulares y entendiste cuándo usarlas.
Lambda con Funciones Integradas - Exploraste cómo combinar funciones lambda con las funciones integradas de Python como
map(),filter()ysorted()para realizar transformaciones de datos potentes de manera eficiente.Aplicaciones Prácticas de Lambda - Implementaste ejemplos prácticos incluyendo expresiones condicionales, una calculadora simple y técnicas de transformación de datos para procesar colecciones de datos.
Técnicas Avanzadas con Lambda - Exploraste funciones de orden superior, composición de funciones, funciones lambda recursivas usando el Y combinator, y la aplicación parcial de funciones para resolver problemas complejos de manera concisa.
Las funciones lambda son una herramienta poderosa en la programación en Python, que permite estilos de programación funcionales y concisos. Si bien son más adecuadas para operaciones simples, su capacidad para ser pasadas como argumentos y devueltas desde funciones las hace increíblemente versátiles para una amplia gama de aplicaciones.
Al dominar las funciones lambda, has añadido una herramienta importante a tu kit de herramientas de programación en Python que te ayudará a escribir código más elegante y eficiente.



