Professional Documents
Culture Documents
Mayo de 2011
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o Mayo de 2011 1 / 34
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
2 / 34
Repaso
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
3 / 34
Repaso
Repaso ...
Sintxis bsica a a
def funcion ( param , clave = " default " ): print " Ejecutando : funcion ( " + \
str ( param ) + " , clave = " \ + str ( clave ) + " ) " return None
funcion (1) funcion (1 , " mi clave " )
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
4 / 34
Repaso
Funciones varidicas a
En la lista de parmetros ... a Operador * Captura en un nombre los parmetros a 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 " Parametros : " , args print " Claves : " , keys
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
5 / 34
Repaso
Funciones varidicas a
En la lista de parmetros ... a Operador * Captura en un nombre los parmetros a restantes como una tupla. Operador ** Captura en un nombre las claves restantes como un diccionario.
funcion (1 , 2 , 3 , manolete ) funcion ( nombre = Juan Pedro , apellidos = Bolivar Puente )
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
6 / 34
Repaso
Funciones varidicas a
En una llamada a funcin o 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 Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
7 / 34
Repaso
Funciones varidicas a
En una llamada a funcin o Operador * Expande una secuencia como argumentos a la funcion. Operador ** Expande un diccionario como argumentos clave a la funcion.
def persona ( nombre = Anonimo ,
apellidos = Bastardo , dni = Sin DNI ): print apellidos + " ," , nombre , " ( " + dni + " ) " yo = { nombre : Jhon , apellidos : Doe } persona (** yo )
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o Mayo de 2011 8 / 34
Programacin funcional o
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
9 / 34
Programacin funcional o
Programacin Funcional o
... rase una vez la conjetura de Hilbert ... e
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Programacin funcional o
Programacin multiparadigma o
Python es multiparadigma
Opinin personal ... o Macrodiseo Orientacin a Objetos n o Microdiseo Programacin Funcional n o
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
11 / 34
Programacin funcional o
Programacin imperativa o
Unidad sintctica elemental: a la sentencia Operacin elemental: o la asignacin o 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
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Programacin funcional o
Programacin funcional o
Unidad sintctica elemental:la expresin a o Operacin elemental: la aplicacin o o Modelo: valores ... calcular
y = random . randint (0 , 10) x = 1 + (3 if y % 2 else -2) print x
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
14 / 34
Genericidad
Las funciones pueden pasarse como parmetro. a Ejemplo
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
16 / 34
Instanciacin o
Las funciones pueden devolver otras funciones. Ejemplo
def devuelvefun ( param ): if param : return random . random else : return list
fun = devuelvefun ( True ) print fun () fun = devuelvefun ( False ) print fun ()
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
17 / 34
Abstraccin procedural o
Cualquier sentencia puede convertirse en funcin. o Ejemplo (Abstraccin + Instanciacin) o o
Embebimiento
Cualquier funcin puede guardarse en cualquier parte. o 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 Tema 1 Programacin Funcional de Andaluc a) o Mayo de 2011 22 / 34
Indice
1 2 3 4
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
23 / 34
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
24 / 34
inic , lista = lista [0] , lista [ for x in lista : inic = func ( inic , x ) return inic
print reduce ( lambda x , y : x + y , range (10))
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
26 / 34
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
27 / 34
Curricacin o
Curricacin = Fijar parmetros de una funcin. o a o A mano
from operator import add addtwo = lambda x : add (2 , x ) print print addtwo (3) # 5
Con functools.partial
Otras utilidades
Emparejar los elementos de dos listas ... zip ( hola , range (3)) Verdadero si todos son verdaderos ... all ([ True , [] , True ]) Verdadero si alguno es verdadero ... any ([ True , [] , True ])
Mayo de 2011 31 / 34
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Recursos adicionales
Dive Into Python Mark Pilgrim http://diveintopython.org/functional_ programming/index.html Functional Programming HOWTO Andrew M. Kuchling http: //www.amk.ca/python/writing/functional
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
32 / 34
Recursos adicionales
Concepts, Techniques, and Models of Computer Programming Peter Van Roy, Seif Haridi MIT Press 2005 python-functional Collin Winter http://oakwinter.com/code/functional/ documentation/ python-goopy Google http://goog-goopy.sourceforge.net/
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o Mayo de 2011 33 / 34
Juan Pedro Bol var Puente (Instituto de Astrof sica Tema 1 Programacin Funcional de Andaluc a) o
Mayo de 2011
34 / 34