2. Advertencia
Me he leído el CoC pero seguramente se me
escape algo que pueda ser políticamente
incorrecto.
En mi defensa, el Gangsta Rap, los videojuegos,
el metal y el stand up comedy de genios como
Richard Pryor y George Carlin.
Sobre la monadas, functores y otros temas fancy,
esta no es la charla ni la conferencia JFYI ;-)
3. El protocolo
Nombre Alejandro Brito Monedero
Insultos @ae_bm
Como estoy aquí No se ^_^
Ocupación Sysadmin / DevOps / … /
Buzzword
Paradero Madrid DevOps, Python Madrid,
Postgres España, ...
4. ● Código que cabe en tu
memoria a corto plazo =>
● Mantenible
● Capacidad de
composición
● Trollear no usando
programación imperativa
7. Python no es un lenguaje
funcional:
● Mutabilidad por defecto
● Iteración > recursividad
● Tipos
● ...
8. ● Reducir los side
effects
● Reducir la necesidad
de mutar los datos
● Funciones como
ciudadanos de primer
orden
● Hacer funciones que
se puedan componer
● Aprovechar el
lazyness
9. Pensar en lineas de ensamblaje o
comando_1 | comando_2 | …
si has usado un poco *NIX
17. with open('genoma.txt', 'rb') as f:
read_data = f.read()
...
Out of memory: kill process xxxx
Killed process xxxx (python)
18.
19. Mejor es iterar sobre
cada elemento.
Siendo el elemento
creado justo antes de
ser utilizado
20. Python 2
range() → xrange()
map() → itertools.imap()
filter() → itertools.ifilter()
zip() → itertools.izip()
Python 2 y Python 3
[x for x in iterable if f(x)] →
(x for x in interable if f(x))
21. ¿La única forma de crear iteradores es usar OOP
e implementar la interfaz iterador?
24. itertools
Inspirados en construcciones de lenguajes tan
populares como APL, Haskell y SML
Eficientes en el uso de memoria (recordar los
streams)
https://docs.python.org/2/library/itertools.html
https://docs.python.org/3/library/itertools.html
26. functools
Funciones de orden superior a.k.a funciones que
reciben y/o retornan funciones
Decoradores
https://docs.python.org/2/library/functools.html
https://docs.python.org/3/library/functools.html
27. functools
reduce(operator.add, [1, 2, 3], -6) → (((-6 + 1) + 2) + 3)
partial(): generar una función con argumentos
prefijados
wraps(): para usar con los decoradores
lru_cache(): crear una función con memoria
28. ¿Los decoradores, los closures y funciones
anidadas?
- Seguro ya hay N charlas del tema
30. Conclusiones
Hacer funciones pequeñas K.I.S.S
Aprovechar las baterías de python
Pensar en listas, iteradores, streams
Usar composición de funciones
El I/O y las validaciones tratar de tenerlo en los
extremos
Disciplina para no introducir side effects