Skip to main content

Funciones lambda en Python

⏱ Dedicación recomendada: 0 minutos
Esto considera el contenido visible y relevante, e ignora texto colapsado o marcado como opcional.


r8vnhill/

En Python, las funciones lambda también son funciones anónimas que pueden definirse en una sola línea. Son útiles cuando se requiere una función simple sin necesidad de declararla explícitamente con def. Sin embargo, en comparación con Kotlin, las lambdas en Python tienen varias limitaciones.

📌 Definición y sintaxis

En Python, una función lambda se define con la palabra clave lambda, seguida de los argumentos y una única expresión que se evalúa y devuelve como resultado.

lambda_example.py
add = lambda a, b: a + b

print(add(3, 4)) # Output: 7

🔍 Diferencias con Kotlin

AspectoPythonKotlin
Palabra clavelambda{} para la expresión, fun para funciones anónimas
Retorno implícitoSí, siempre devuelve el resultado de la expresiónSí, última expresión se devuelve implícitamente
Bloques múltiples❌ No permite múltiples expresiones✅ Sí, permite múltiples expresiones dentro de una función anónima
Tipos de parámetrosNo se especifican (dinámico)Se pueden definir explícitamente
Acceso a variables externasSolo permite acceso a variables no reasignadasPermite capturas de contexto mutable
💡 Importante

Las funciones lambda en Python no pueden contener múltiples sentencias. Solo admiten una única expresión.

📏 Restricciones en Python

Python restringe las lambdas a una sola expresión, lo que significa que no se pueden definir múltiples líneas dentro de una lambda.

invalid_lambda.py
# Esto dará error en Python
lambda a, b: c = a + b # SyntaxError

Para definir funciones más complejas en Python, es necesario utilizar def:

valid_function.py
def add(a, b):
c = a + b # Ahora es válido
return c

🔹 En Kotlin, se pueden tener múltiples expresiones en una función anónima sin necesidad de return, lo que hace que las funciones lambda sean más flexibles.


📦 Funciones de Orden Superior

Las funciones lambda en Python son ampliamente usadas en funciones de orden superior, como map, filter y reduce.

🔹 map con lambda en Python

map_example.py
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # Output: [1, 4, 9, 16, 25]

📌 Diferencia con Kotlin:

  • Python usa map(función, iterable), mientras que en Kotlin se usa .map { it * it }.
  • En Kotlin, los tipos pueden inferirse o definirse explícitamente.

🔎 Captura de Variables en Lambdas

Las funciones lambda en Python capturan variables por referencia, lo que puede causar problemas inesperados.

closure.py
multipliers = [lambda x: x * i for i in range(5)]
print(multipliers ) # Output: 8 en vez de 0

📌 ¿Qué está pasando?
El valor de i se comparte entre todas las lambdas, lo que puede llevar a resultados inesperados. Para solucionar esto:

fix_closure.py
multipliers = [lambda x, i=i: x * i for i in range(5)]
print(multipliers ) # Output: 0 (correcto)

En Kotlin, las lambdas pueden capturar variables mutables sin problemas.


🚀 Expresiones Lambda en Estructuras de Control

Python NO permite usar lambdas en if, while, for directamente

En Python, no es posible utilizar una lambda directamente en una estructura de control como if o for.

invalid_lambda_control.py
# Esto dará error
if lambda x: x > 10:
print("Mayor que 10")

🔹 Alternativa en Python:

valid_lambda_control.py
check = lambda x: x > 10
if check(15):
print("Mayor que 10") # Output: Mayor que 10

En Kotlin, sí se pueden usar directamente dentro de estructuras de control.


🏆 ¿Cuándo usar lambdas en Python?

🔹 Casos donde es recomendable:

  • Pasar funciones simples a map, filter, sorted, reduce.
  • Definir pequeñas funciones en una sola línea.

🔹 Casos donde no es recomendable:

  • Funciones que requieren más de una línea de código.
  • Casos donde la legibilidad se vea afectada.

📌 Conclusión:

  • Python ofrece funciones lambda sencillas pero con restricciones.
  • Kotlin tiene una sintaxis más flexible que permite expresiones múltiples y una mejor integración con estructuras de control.

🎯 Resumen Final

CaracterísticaPythonKotlin
Lambdas en una línea✅ Sí✅ Sí
Lambdas con múltiples expresiones❌ No✅ Sí
Uso con if y for❌ No permitido✅ Sí, sin restricciones
Captura de variables mutables⚠️ Posible problema✅ Sin problemas
Inferencia de tipos⚠️ Dinámico, puede fallar✅ Sí, más control sobre los tipos
Uso en funciones de orden superior✅ Sí (map, filter)✅ Sí (map, filter)

Si necesitas una lambda rápida y sencilla, Python es suficiente.
Si buscas más flexibilidad y poder en expresiones complejas, Kotlin ofrece una mejor alternativa.


📚 Referencias

  • Python Software Foundation. (2024). Lambda Expressions. Retrieved from docs.python.org
  • Jemerov, D., & Isakova, S. (2017). Kotlin in Action. Manning Publications.
  • Luciano Ramalho. (2015). Fluent Python. O’Reilly Media.

Esta lección resalta las ventajas y limitaciones de cada lenguaje. Python es más restrictivo con las lambdas, mientras que Kotlin permite expresiones más avanzadas. 🚀