Historia del tema
El concepto de funciones de orden superior proviene de la programación funcional y está disponible en Python desde sus inicios. Permite construir un código más abstracto, flexible y conciso.
Problema
Muchos subestiman las capacidades de las funciones como objetos de primer orden. Se producen errores al pasar/retornar funciones incorrectamente, llamarlas de manera errónea o perder la legibilidad del código.
Solución
En Python, una función es un objeto completo. Se puede pasar como argumento, retornar de otras funciones y almacenar en colecciones. Esto es lo que se denomina función de orden superior. Permite implementar envolturas universales, callbacks, decoradores y otros patrones.
Ejemplo de código:
def apply_function(func, value): return func(value) def square(x): return x * x result = apply_function(square, 5) # Retornará 25
Características clave:
¿Pueden las funciones de orden superior retornar no solo funciones, sino también datos?
Sí, una función de orden superior es cualquier función que toma una función como argumento y/o retorna una función. No hay limitaciones en el valor retornado.
¿Retorna la función incorporada map un objeto generador o una lista en sí? (Python 3+)
En Python 3, map retorna un objeto generador iterable, no una lista. Para obtener una lista, se debe encerrar explícitamente en list(map(...)).
squared = map(lambda x: x**2, [1,2,3]) result = list(squared) # Ahora obtendremos [1, 4, 9]
¿Es posible asignar funciones a variables y almacenarlas en colecciones?
Sí, las funciones se pueden asignar a variables, almacenar en listas, diccionarios y pasar como argumentos como valores. Son objetos comunes de Python.
def greet(): print('Hello') a = greet a() # Llamará a greet
Intentar implementar el registro para varias funciones sin funciones de orden superior llevó a duplicación de código y errores en cada manejador individual.
Ventajas:
Desventajas:
Se introdujo un decorador logger universal — todas las funciones comenzaron a registrarse de manera uniforme, el código se volvió más limpio.
Ventajas:
Desventajas: