Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Funciones de orden superior Python: Funciones

En Python, la función incorporada sorted() ordena listas comparando sus elementos con el operador <. Esto funciona bien con números y cadenas, pero puede fallar en estructuras más complejas, como listas de diccionarios.

⏬ Imagina que recibimos una lista de usuarios y necesitamos ordenarlos por edad:

users = [
  { 'name': 'Juan', 'age': 19 },
  { 'name': 'Sofía', 'age': 1 },
  { 'name': 'Carlos', 'age': 4 },
  { 'name': 'Mateo', 'age': 16 },
]

La función sorted() no puede ordenar esta lista correctamente sin ayuda, porque los elementos son diccionarios y no valores simples. Queremos poder ordenar por cualquier criterio y en cualquier orden, sin tener que reescribir una función sorted() para cada caso.

Parámetro key en sorted()

Python ofrece una solución elegante: la función sorted() permite definir un criterio de ordenamiento a través del parámetro key:

sorted(iterable, /, *, key=None, reverse=False)

Este parámetro acepta una función personalizada que indica cómo comparar los elementos. Así, no tenemos que modificar el algoritmo de ordenamiento, solo decidir qué comparar.

Ejemplo: ordenar por edad

def sort_key(user):
    return user['age']

sorted_users = sorted(users, key=sort_key)

print(sorted_users)
# => [ { 'name': 'Sofía', 'age': 1 },
#      { 'name': 'Carlos', 'age': 4 },
#      { 'name': 'Mateo', 'age': 16 },
#      { 'name': 'Juan', 'age': 19 } ]

sorted() hace todo el trabajo de mover los elementos en la lista. La función sort_key extrae el valor age de cada usuario para comparar.

Funciones de orden superior y callbacks

Las funciones que aceptan o devuelven otras funciones se llaman funciones de orden superior. sorted() es un ejemplo, ya que recibe una función (key) como argumento.

La función que pasamos a sorted() se llama callback (función de retorno), porque no la llamamos directamente, sino que sorted() la ejecuta por nosotros.

Ejemplo de callback:

def say(fn):
  message = fn()  # Llama a la función que recibe como argumento
  print(message)

my_callback_fn = lambda: '¡Hola!'
say(my_callback_fn) # => ¡Hola!

Uso de lambdas en sorted()

En lugar de definir una función con def, podemos usar una función lambda directamente en sorted() para ordenar una lista de diccionarios:

sorted(users, key=lambda user: user['age'])

# => [ { 'name': 'Sofía', 'age': 1 },
#      { 'name': 'Carlos', 'age': 4 },
#      { 'name': 'Mateo', 'age': 16 },
#      { 'name': 'Juan', 'age': 19 } ]

Lambda user: user['age'] reemplaza a sort_key() en una sola línea. Esta forma es más concisa y clara cuando la función es pequeña.

Eliminando ciclos con funciones de orden superior

Las funciones de orden superior pueden reemplazar ciclos, haciendo el código más expresivo.

Ejemplo avanzado de map() y filter():

'\n'.join(
    map(
        lambda user: f"{user['name']} tiene {user['age']} años",
        filter(lambda user: user['age'] >= 16, users)
    )
)
# => Juan tiene 19 años
#    Mateo tiene 16 años
  • filter() selecciona usuarios con age >= 16.
  • map() transforma cada usuario en una cadena de texto.
  • join() une las líneas en un solo string.

En los próximos temas exploraremos tres funciones clave de orden superior:

  • map() para transformar datos.
  • filter() para filtrar elementos.
  • reduce() para reducir listas a un solo valor.

Estas funciones son muy poderosas y permiten resolver problemas sin escribir ciclos manualmente

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.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY