Curso Programando con Python – Clase 12

Programación funcional

 

En esta clase veremos un apartado de Python que lo dota de gran potencia y que no existe en otro tipo de lenguajes: la programación funcional.

 

En Python se pueden usar funciones como si otro tipo de datos se tratara,  es decir, se pueden definir funciones, invocar funciones pasandole parámetros, pasar funciones como parámetros,etc

Pej.

supongamos que tenemos dos funciones, una para sumar y otra para restar definidas

def sumar(x,y):

   return x+y

 

def restar(x,y):

   return x-y

 

pero también podemos definir una función que como parámetro tenga otra función

def operar(f,x,y):

   return f(x,y)

 

Entonces podemos sumar dos números de la forma

operar(suma,x,y)

y restar dos número de la forma

operar(restar,x,y)

 

Claro os podéis preguntar para qué usar este tipo de notación si con la programación tradicional ya se pueden definir funciones sin pasar funciones como parámetro??

La programación funcional en Python nos va a permitir hacer toda una serie de construcciones y darle unas funcionalidades que con otro tipo de lenguajes es más complicado de realizar.

La programación funcional se usa mucho para el tratamiento de listas.

 

Funciones filter, map y reduce

La función filter aplica una función booleana a cada elemento de una lista creando otra lista con los elementos que cumplen la condición

Pej

def grande(x):

   return x>100

 

filter(grande,[5,500,200,20,150])

 

retornaria 

[500,200,150]

 

La función map aplica una función a cada elemento de una lista creando otra lista con el resultado de cada operación

Pej

def doble(x):

   return x+x

 

filter(doble,[1,10,50])

 

retornaria 

[2,20,100]

 

La función reduce es quizás la más extraña de las tres y consiste en aplicar una función como si fuera una suma y tomando los parámetros de la lista de partiéndola en dos trozos

Pej

def multiplicar(x,y):

   return x*y

 

filter(multiplicar,[2,3,5])

 

retornaria 

30 como resultado de 2*3*5

 

Generadores

 

En Python se pueden definir listas con los llamados generadores que son objetos que permiten usar valores de la lista instanciados solo en el momento que se usan.

Al principio es confuso pero la idea es no crear la lista en el momento de la definición si no solo de forma parcial cuando se usa.

Esto es muy conveniente para listas de gran tamaño que de otra manera usaban mucha memoria.

 

pej

para crear una lista de los 1000 primeros números podríamos usar

range(1000)

 

Comprehensions

En Python se puede usar una notación especial para crear una lista a partir de otra llamada Comprehensions

La notación es 

        [ f(x) for x in lista ]

y que define una lista al aplicar una función a cada elemento de la lista dada

 

Pej

[ 2*x for x in range(10,15) ]

daria la lista

[ 20,22,24,26,28,30 ]

 

También se puede aplicar una condición de la forma

[ f(x) for x in lista if condicion ]

Pej

[ 2*x for x in range(10,15) if x%2=0 ]

 

daria la lista (lista solo de los elementos pares)

[ 20,24,28 ]

 

Este tipo de notación al principio cuesta de entender y aplicar pero una vez dominado da bastante potencia al lenguaje.

 

Indice del Curso Programando con Python

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *