En los lenguajes de programación existe el concepto de objetos de primera clase. Son aquellos elementos que pueden:
- Pasarse como argumentos a funciones.
- Ser devueltos por funciones.
- Asignarse a variables.
Cualquier dato es un objeto de primera clase, como números, cadenas, listas o valores booleanos.
# 5 es un número, un objeto de primera clase (asignado a una variable)
num = 5
# 2 es un número (argumento de una función)
# num es un objeto de primera clase (argumento de una función)
# result es un objeto de primera clase (valor devuelto por la función)
result = pow(num, 2)
Pero no solo los datos pueden ser objetos de primera clase, sino también estructuras del lenguaje, como las funciones. En Python, las funciones son objetos de primera clase, lo que influye en su uso y en el estilo de programación. Veamos cómo tratarlas como datos.
Funciones anónimas (lambdas)
Las funciones anónimas son funciones sin nombre, definidas con la palabra clave lambda. Su nombre viene de la lambda-abstracción, un concepto de cálculo lambda usado en el diseño de lenguajes de programación.
lambda x: x + 2
Dado que las funciones en Python son objetos de primera clase, podemos asignarlas a variables:
add_two = lambda x: x + 2
Ahora, usarla es igual que cualquier otra función:
add_two(1) # 3
add_two(5) # 7
Incluso podemos asignarla a otra variable, ya que las funciones son referencias en memoria:
# Lambda sin parámetros
a = lambda: 'Me encanta Python'
a() # 'Me encanta Python'
b = a # Asignamos la referencia a otra variable
b() # 'Me encanta Python'
También podemos ejecutar una función lambda sin guardarla en una variable:
(lambda: print('Me encanta Python'))() # Me encanta Python
Aquí definimos la función (lambda: print('Me encanta Python')) y la llamamos de inmediato con ().
Pero como no la guardamos en una variable, no podremos reutilizarla.
Características de las lambdas
- Los parámetros no llevan paréntesis, pero admiten parámetros nombrados,
*argsy**kwargs. - El cuerpo de la función es una sola expresión, cuyo resultado se devuelve automáticamente.
- No requieren la palabra clave
return, ya que la expresión evaluada se retorna implícitamente.
Las lambdas son útiles para definir funciones pequeñas sin necesidad de nombrarlas.
Funciones nombradas
Comparando con el ejemplo anterior:
add_two = lambda x: x + 2
Es similar a:
def add_two(x):
return x + 2
La diferencia es que def asigna la función a un nombre de variable.
Las funciones definidas con def se llaman funciones nombradas, porque tienen un identificador.
Al ser objetos de primera clase, también pueden asignarse a variables:
def add_two(x):
return x + 2
a = add_two # Guardamos la referencia en otra variable
a(1) # 3
Crear funciones dentro de funciones
Como las lambdas son expresiones, podemos definirlas en cualquier lugar donde sea válido un expresión, incluso dentro de otra función:
def sum(a, b):
# Creamos una función anónima dentro de sum()
inner_sum = lambda x, y: x + y
# Llamamos la función y retornamos su resultado
return inner_sum(a, b)
sum(1, 4) # 5
Aquí inner_sum solo existe dentro de sum(), lo que ayuda a organizar el código.
Resumen
En Python, las funciones son objetos de primera clase, lo que significa que podemos:
- Asignarlas a variables.
- Pasarlas como argumentos a otras funciones (lo veremos más adelante).
- Retornarlas desde funciones.
Este concepto es clave para la programación funcional, lo que nos permite escribir código más flexible y expresivo.
Materiales adicionales
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.