PDF de programación - Tema 1 Programación Funcional - Curso de Python Avanzado

Imágen de pdf Tema 1 Programación Funcional - Curso de Python Avanzado

Tema 1 Programación Funcional - Curso de Python Avanzadográfica de visualizaciones

Publicado el 6 de Mayo del 2018
10.801 visualizaciones desde el 6 de Mayo del 2018
593,9 KB
34 paginas
Creado hace 12a (01/05/2011)
Tema 1 Programación Funcional

Curso de Python Avanzado

Juan Pedro Bolívar Puente

Instituto de Astrofísica de Andalucía

Mayo de 2011

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

1 / 34

Índice

1 Repaso
2 Programación funcional
3 Funciones de primer orden
4 Funciones de alto orden

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

2 / 34

Índice

Repaso

1 Repaso
2 Programación funcional
3 Funciones de primer orden
4 Funciones de alto orden

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

3 / 34

Repaso

Repaso ...

Sintáxis básica

def funcion ( param , clave = " default " ):
print " E j e c u t a n d o : funcion ( " + \

str ( param ) + " , clave = " \
+ str ( clave ) + " ) "

return None

funcion (1)
funcion (1 , " mi clave " )

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

4 / 34

Funciones variádicas

Repaso

En la lista de parámetros ...
Operador * Captura en un nombre los parámetros

restantes como una tupla.

Operador ** Captura en un nombre las claves restantes

como un diccionario.

def funcion (* args , ** keys ):

print " -- Llamando a funcion con : -- "
print " P a r a m e t r o s : " , args
print " Claves : " , keys

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

5 / 34

Funciones variádicas

Repaso

En la lista de parámetros ...
Operador * Captura en un nombre los parámetros

restantes como una tupla.

Operador ** Captura en un nombre las claves restantes

como un diccionario.

funcion (1 , 2 , 3 , ’ manolete ’)
funcion ( nombre

= ’ Juan Pedro ’ ,

a pe ll i do s = ’ Bolivar Puente ’)

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

6 / 34

Funciones variádicas

Repaso

En una llamada a función
Operador * Expande una secuencia como argumentos a

la funcion.

Operador ** Expande un diccionario como argumentos

clave a la funcion.

def sum3 (a , b , c ):

return a + b + c

print sum3 (* range (3))

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

7 / 34

Funciones variádicas

Repaso

En una llamada a función
Operador * Expande una secuencia como argumentos a

la funcion.

Operador ** Expande un diccionario como argumentos

clave a la funcion.

def persona ( nombre = ’ Anonimo ’ ,

a pe ll i do s = ’ Bastardo ’ ,
dni = ’ Sin DNI ’ ):

print a pe ll i do s + " ," , nombre , " ( " + dni + " ) "

yo = { ’ nombre ’

: ’ Jhon ’ ,
’ a pe ll i do s ’ : ’ Doe ’ }

persona (** yo )

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

8 / 34

Programación funcional

Índice

1 Repaso
2 Programación funcional
3 Funciones de primer orden
4 Funciones de alto orden

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

9 / 34

Programación funcional

Programación Funcional

... érase una vez la conjetura de Hilbert ...

Modelo Máquina de Turing
Paradigma Imperativo ⇒
Estructurado ⇒ Orientado a
Objetos
Fortran, Algol, C, Smalltalk, Java

Modelo Lambda Calculi

Paradigma Funcional ⇒ Lógico ⇒
Declarativo
Lisp, ML, Prolog, Erlang, Haskell

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

10 / 34

Figura: Alonzo Church

Programación funcional

Programación multiparadigma

Python es

multiparadigma

Opinión personal ...

Macrodiseño ⇒ Orientación a Objetos
Microdiseño ⇒ Programación Funcional

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

11 / 34

Programación funcional

Programación imperativa

Unidad sintáctica elemental:
la sentencia
Operación elemental:
la asignación
Modelo: variables ...
“computar”

import random as r
x = 1
y = r . randint (0 ,10)
if y % 2:

x = x + 3

else :

x = x - 2

print x

Desventaja

Dificil razonar formalmente sobre el estado.

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

12 / 34

Programación funcional

Programación funcional

Unidad sintáctica elemental:la expresión
Operación elemental: la aplicación
Modelo: valores ... “calcular”

y = random . randint (0 , 10)
x = 1 + (3 if y % 2 else -2)
print x

Desventaja

Entrada y salida. Mutabilidad.

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

13 / 34

Funciones de primer orden

Índice

1 Repaso
2 Programación funcional
3 Funciones de primer orden
4 Funciones de alto orden

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

14 / 34

Funciones de primer orden

Funciones de primer orden

Programación funcional ⇒ Funciones valores “normales”

Genericidad Las funciones pueden

pasarse como parámetro.
Instanciación Las funciones pueden
devolver otras funciones.

Abstracción procedural Cualquier sentencia puede

convertirse en función.

Embebimiento Las funciones pueden

almacenerse en estructuras de datos.

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

15 / 34

Funciones de primer orden

Genericidad

Las funciones pueden pasarse como parámetro.

Ejemplo

def e j e c u t a r f u n ( funcion ):

res = funcion ()
print " R es u lt ad o : " + str ( res )

e j e c u t a r f u n ( random . random )

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

16 / 34

Funciones de primer orden

Instanciación

Las funciones pueden devolver otras funciones.

Ejemplo

def d e v u e l v e f u n ( param ):

if param : return random . random
else : return list

fun = d e v u e l v e f u n ( True )
print fun ()
fun = d e v u e l v e f u n ( False )
print fun ()

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

17 / 34

Funciones de primer orden

Abstracción procedural

Cualquier sentencia puede convertirse en función.

Ejemplo (Abstracción + Instanciación)

def m a k e _ s u m a d o r ( k ):

def sumador ( x ):
return x + k

return sumador

mas_dos = m a k e _ s u m a d o r (2)
print mas_dos (1) # Imprime 3
print mas_dos (2) # Imprime 4

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

18 / 34

Funciones de primer orden

Abstracción procedural ... Lambdas

Lambda = Función anónima (sin nombre).
¡Sólo expresiones!

Ejemplo (Lambdas...)

def m a k e _ s u m a d o r _ l a m b d a ( k ):

return lambda x : x + k

mas_dos = m a k e _ s u m a d o r _ l a m b d a (2)
print mas_dos (1)
print mas_dos (2)

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

19 / 34

Funciones de primer orden

Abstracción procedural ... Lambdas

El cierre captura valores no nombres

I.e. no podemos modificar la variable “de fuera”

Ejemplo incorrecto (... y requiere Python 3)

def m a k e _ c o n t a d o r ( x ):

def contador ():

nonlocal x
x += 1

return contador

var = 2
cnt = m a k e _ c o n t a d o r ( var )
cnt (); cnt (); print var # 2!!

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

20 / 34

Funciones de primer orden

Abstracción procedural ... Lambdas

Ejemplo “correcto”

def m a k e _ c o n t a d o r ( x ):

def contador ():

x [0] += 1

return contador

var = [2]
cnt = m a k e _ c o n t a d o r ( var )
cnt (); cnt (); print var # [4] , Ok

Reflexión ...

¿Estado mutable + comportamiento? ⇒ ¡Objetos!

Alternativa Generadores (tema 3)

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

21 / 34

Funciones de primer orden

Embebimiento

Cualquier función puede guardarse en cualquier parte.

Ejemplo (Embebimiento)

from operator import add , sub , div # , mul
funcs = { ’+ ’
’ - ’
’* ’
’/ ’

: add ,
: sub ,
: lambda a , b : a * b ,
: div }

print funcs [ ’+ ’] (1 , 2)
print funcs [ ’ - ’] (1 , 2)
print funcs [ ’* ’] (1 , 2)
print funcs [ ’/ ’] (1 , 2)

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

22 / 34

Funciones de alto orden

Índice

1 Repaso
2 Programación funcional
3 Funciones de primer orden
4 Funciones de alto orden

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

23 / 34

Funciones de alto orden

Funciones de alto orden

Los tres mosqueteros de la programación funcional

Trabajar sobre listas ⇒ Abstraer la iteración

Filosofía

map (func, lista)

Devuelve una lista aplicando func a cada elemento

reduce (func, lista, (primero))

Devuelve un valor aplicando la operación binaria func

filter (pred, lista)

Devuelve una lista filtrando con el predicado pred

Juan Pedro Bolívar Puente (Instituto de Astrofísica de Andalucía)

Tema 1 Programación Funcional

Mayo de 2011

24 / 34

Funciones de alto orden

La función map (func, lista)

def map ( func , lista ):

res = []
for x in lista :

res . append ( func ( x ))

return res

def map ( func , lista ):

return [ func ( x ) for x in lista ]

print map ( lambda x : x * 2 , range (10))

Juan Pedro Bolívar Puente (Instituto de Astrofísica de
  • Links de descarga
http://lwp-l.com/pdf10861

Comentarios de: Tema 1 Programación Funcional - Curso de Python Avanzado (1)

Carlos
30 de Octubre del 2021
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad