En esta entrada comenzaremos a entender el proposito de las funciones de orden superior en Python, y para eso se ha preparado algunos ejemplos y videos de explicación para que te quede mucho más claro.
Antes de comenzar te invito para que veas nuestro Curso Gratuito de Python desde Cero.
Y que te suscribas al canal, si te gusta la programación, electrónica y la teoría del control:
¿Qué es una función de orden superior? Python
Una función se denomina Función de orden superior si esta contiene otras funciones como parámetros de entrada o si devuelve una función como salida, es decir, las funciones que operan con otra función se conocen como Funciones de orden superior en Python.
Recuerda que en una entrada pasada, vimos en detalle como funcionan y como se crean funciones en Python.
Para poder entender mejor este concepto vamos a ver algunos ejemplos de funciones de orden superior en python.
Suponga que se tiene una función, llamada high_order_function que recibe como parámetro de entrada una función:
Ejemplo 1
def high_order_function(fun): fun()
Y adicionalmente, en nuestro scope de trabajo de Python, tenemos otra función que recibe un saludo llamada greeting como lo vemos a continuación:
def greeting(): print("Hello World")
Y finalmente, en nuestro programa principal, vamos a llamar la función high_order_function que tiene como parámetro de entrada la función greeting y que nos dará como resultado el saludo Hello World.
high_order_function(greeting)
Hello World
Note, que el programa anterior representa fielmente la definición de una función de orden superior en lenguajes de programación como Python.
Ejemplo 2
En este ejemplo, vamos a crear una función de orden superior con python, que permita realizar una operación matemática a un número o parámetro de entrada:
def operation(x, fun): return fun(x)
En la función anterior llamada operation, estamos recibiendo un parámetro de entrada x y adicionalmente, estamos recibiendo otro parámetro de entrada llamado fun, el cual será una función, por lo tanto esta función operation será una función de orden superior. Adicionalmente note que dicha función también retorna una función como salida, sgún podemos ver en return fun(x)
Creamos otras dos funciones estandar, las cuales serán llamadas por la función de orden superior, en este caso dos operaciones matemáticas como obtener la raíz cuadrad y la de elevar un número al cuadrado:
def sqrt(x): return x**0.5 def squared(x): return x**2
Ahora podemos hacer el llamado de la función de orden superior la cual será capaz de invocar las otras funciones, empleando unicamente el identificador o nombre de la función.
Si queremos obtener la raíz cuadrada de 16 lo hacemos:
result_1 = operation(16,sqrt) print(result_1)
Si queremos elevar al cuadrado el 16 lo hacemos:
result_2 = operation(16,squared) print(result_2)
Funciones de Orden Superior principales en Python
Una vez se ha entendido el concepto de lo que es una función de orden superior, vamos a ver que dentro de Python, tenemos tres funciones principales que se encajan en esta categoría, las cuales son filter(), map() y reduce().
Función filter() en python
La función filter() devuelve un iterador donde los elementos se filtran a través de una función para probar si el elemento es aceptado o no.
Su sintaxis es:
filter(function, iterable)
En este caso, para usar la función que está como parámetro de entrada en filter, es muy usal usar la función lambda de python, la cual ya explicamos en detalle en el sitio web.
Ejemplo
A partir de una lista de números enteros, obtener únicamente los números pares empleando para ello la función de orden superior de pytho filter():
integer = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] even = list(filter(lambda x: x%2 == 0, integer)) print(even)
Note en el ejemplo anterior, que como función dentro de filter, usamos una lambda function de tal forma a buscar cuales son los números cuyo módulo por dos sea cero (de esa forma sabemos si es par) y note que el segundo parámetro de entrada iterable, es una lista, el cual efectivamente es un objeto iterable dentro de python.
Función map() en python
La función map() ejecuta una función específica para cada elemento en un iterable. El objeto se envía a la función como parámetro.
Su sintaxis es:
map(function, iterables)
El primer argumento de la función es la función de mapeo. Los segundos argumentos son uno o varios iterables que se pasan secuencialmente a la función de mapeo.
Esta función se usa principalmente para transformar un objeto, en otro objeto con alguna otra característica adicional. Y nuevamente, es muy común usar las funciones anónimas de Python, o Lambda Functions.
Ejemplo
A partir de una lista de números enteros, transformar dicha lista creando un objeto nuevo, que contenga todos los elementos de la misma elevados al cubo.
integer = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] cubed = list(map(lambda x: x**3, integer)) print(cubed)
Función reduce() en python
Su sintaxis es:
from functools import reduce
reduce(function, iterables)
La función reduce() acepta una función y una secuencia y devuelve un único valor calculado de la siguiente manera:
- Inicialmente, se llama a la función con los dos primeros elementos de la secuencia y se devuelve el resultado.
- A continuación, se vuelve a llamar a la función con el resultado obtenido en el paso 1 y el siguiente valor de la secuencia. Este proceso se repite hasta que hay elementos en la secuencia.
Ejemplo
A partir de una lista de números enteros realizar la suma acumulada de de cada uno de los elementos que componen la lista usando la función de orden superior reduce().
from functools import reduce integer = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] sumcum = reduce(lambda a,b:a+b, integer) print(sumcum)
De esa manera, hemos representado toda la lista de números en un único número que para este caso específico es la suma acumulada de cada elemento de la lista.
Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:
👉 Invitar a Sergio a un Café ☕️
Que esten muy bien, nos vemos en la siguiente entrada.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.