SlideShare una empresa de Scribd logo
1 de 33
Funcional* para trollear
PyconES 2015 - Valencia
Alejandro E Brito Monedero
@ae_bm
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 ;-)
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, ...
● Código que cabe en tu
memoria a corto plazo =>
● Mantenible
● Capacidad de
composición
● Trollear no usando
programación imperativa
Alonzo Churh
Cálculo
Python no es un lenguaje
funcional:
● Mutabilidad por defecto
● Iteración > recursividad
● Tipos
● ...
● 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
Pensar en lineas de ensamblaje o
comando_1 | comando_2 | …
si has usado un poco *NIX
Hora de ver algo de python
l = []
for e in range(100):
if e % 2 == 0:
l.append(pow(e, 2))
for, if → map y filter
l = map(lambda x: pow(x, 2),
filter(lambda x: x % 2 == 0,
range(100)))
for, if → map y filter
* en python 3 l no es una lista
l = [pow(x, 2)
for x in range(100)
if x % 2 == 0]
for, if → list comprehension
a = [0, 2, 4, 6]
b = [1, 3, 5]
c = []
while a and b:
c.append((a.pop(0), b.pop(0)))
c == [(0, 1), (2, 3), (4, 5)]
zip a.k.a cremallera
a = [0, 2, 4, 6]
b = [1, 3, 5]
c = zip(a, b)
c == [(0, 1), (2, 3), (4, 5)]
zip a.k.a cremallera
Hablemos de la memoria y el regalo del laziness
with open('genoma.txt', 'rb') as f:
read_data = f.read()
...
Out of memory: kill process xxxx
Killed process xxxx (python)
Mejor es iterar sobre
cada elemento.
Siendo el elemento
creado justo antes de
ser utilizado
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))
¿La única forma de crear iteradores es usar OOP
e implementar la interfaz iterador?
Generators
def fancy_generator():
yield "I"
yield "am"
yield "fancy"
' '.join(fancy_generator()) == 'I am fancy'
La hora de las baterías ha llegado
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
itertools
cycle('abc') → 'a' 'b' 'c' 'a' 'b' 'c' 'a' ...
repeat('¿cuanto falta?') → '¿cuanto falta?' '¿cuando falta?' ...
chain([1,2,3], [4, 5, 6]) → 1 2 3 4 5 6
dropwhile(lambda x: x<5, [1,4,6,4,1]) → 6 4 1
takewhile(lambda x: x<5, [1,4,6,4,1]) → 1 4
Generadores combinatorios
...
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
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
¿Los decoradores, los closures y funciones
anidadas?
- Seguro ya hay N charlas del tema
Hora de ver algo de código real
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
Preguntas
Ya he terminado
Créditos
https://upload.wikimedia.org/wikipedia/commons/8/87/Horchateria_de_Santa_Catalina_en_Valencia.jpg
https://upload.wikimedia.org/wikipedia/sr/7/73/Trollface.png
https://upload.wikimedia.org/wikipedia/commons/1/15/Ambox_warning_pn.svg
http://giphy.com/gifs/jon-stewart-why-lYKvaJ8EQTzCU
https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Lambda_lc.svg/500px-Lambda_lc.svg.png
http://witchkitteh.deviantart.com/art/Teach-me-204949930
https://upload.wikimedia.org/wikipedia/en/a/a6/Alonzo_Church.jpg
http://giphy.com/gifs/a8749TBnyEIY8
https://upload.wikimedia.org/wikipedia/commons/9/97/%22USE_PROPER_TOOLS_FOR_THE_JOB_-
_TAKE_CARE_OF_THEM%22_-_NARA_-_515954.jpg
https://c2.staticflickr.com/8/7266/6953971910_664578fc08_b.jpg
http://i.giphy.com/NusWKgMXzVhIc.gif
http://i.giphy.com/DJZ14OxhrEsx2.gif
http://i.giphy.com/6lScd4x2D5Oko.gif
http://i.giphy.com/l41lZZqhIUA6IJNDO.gif
http://img4.wikia.nocookie.net/__cb20131226180633/dragonball/images/thumb/5/51/Grumpy-cat-
nope.jpg/500px-Grumpy-cat-nope.jpg
http://i.giphy.com/AMqCTHuCMFpM4.gif
http://i.giphy.com/IIjH0wN7F3uzS.gif
http://i.giphy.com/fDzM81OYrNjJC.gif

Más contenido relacionado

La actualidad más candente (6)

Presentacion Python
Presentacion  Python Presentacion  Python
Presentacion Python
 
Excel stuff
Excel stuffExcel stuff
Excel stuff
 
Transparencias taller Python
Transparencias taller PythonTransparencias taller Python
Transparencias taller Python
 
Ia Robotica
Ia RoboticaIa Robotica
Ia Robotica
 
Ia Robotica
Ia RoboticaIa Robotica
Ia Robotica
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 

Similar a Funcional para trollear

Similar a Funcional para trollear (20)

Python - Programación para machos
Python - Programación para machosPython - Programación para machos
Python - Programación para machos
 
Iniciación a las artes marciales con Python
Iniciación a las artes marciales con PythonIniciación a las artes marciales con Python
Iniciación a las artes marciales con Python
 
02 - Tipos de datos escalares en Python 3
02 - Tipos de datos escalares en Python 302 - Tipos de datos escalares en Python 3
02 - Tipos de datos escalares en Python 3
 
¿Cómo aprender Python sin morir en el intento?
¿Cómo aprender Python sin morir en el intento?¿Cómo aprender Python sin morir en el intento?
¿Cómo aprender Python sin morir en el intento?
 
Python Vs C
Python Vs CPython Vs C
Python Vs C
 
Go python, go
Go python, goGo python, go
Go python, go
 
El lenguaje de pogramación C++
El lenguaje de pogramación C++El lenguaje de pogramación C++
El lenguaje de pogramación C++
 
Django
DjangoDjango
Django
 
Pythonlearn-01-Intro.pptx
Pythonlearn-01-Intro.pptxPythonlearn-01-Intro.pptx
Pythonlearn-01-Intro.pptx
 
Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))
 
De 0 A Python En 40 Minutos
De 0 A Python En 40 MinutosDe 0 A Python En 40 Minutos
De 0 A Python En 40 Minutos
 
python CIENTIFIFO.pdf
python CIENTIFIFO.pdfpython CIENTIFIFO.pdf
python CIENTIFIFO.pdf
 
Python ¿2 vs 3?
Python ¿2 vs 3?Python ¿2 vs 3?
Python ¿2 vs 3?
 
Mini clase Intro Programación Python UTN Profesorado 2015
Mini clase Intro Programación Python UTN Profesorado 2015Mini clase Intro Programación Python UTN Profesorado 2015
Mini clase Intro Programación Python UTN Profesorado 2015
 
ECIMag 2010 - Clase 4/5
ECIMag 2010 - Clase 4/5ECIMag 2010 - Clase 4/5
ECIMag 2010 - Clase 4/5
 
Python + Ciencia = ♥
Python + Ciencia = ♥Python + Ciencia = ♥
Python + Ciencia = ♥
 
Phyton
PhytonPhyton
Phyton
 
Programando con Python
Programando con PythonProgramando con Python
Programando con Python
 
Python101
Python101Python101
Python101
 
Memoria dinamica en c
Memoria dinamica en cMemoria dinamica en c
Memoria dinamica en c
 

Más de Alejandro E Brito Monedero

Más de Alejandro E Brito Monedero (14)

Mad scalability (perfomance debugging)
Mad scalability (perfomance debugging)Mad scalability (perfomance debugging)
Mad scalability (perfomance debugging)
 
Tres historias
Tres historiasTres historias
Tres historias
 
AMQP vs GRAPHITE
AMQP vs GRAPHITEAMQP vs GRAPHITE
AMQP vs GRAPHITE
 
Sysdig
SysdigSysdig
Sysdig
 
Sysdig SRECon 16 Europe
Sysdig SRECon 16 EuropeSysdig SRECon 16 Europe
Sysdig SRECon 16 Europe
 
Top Bug
Top BugTop Bug
Top Bug
 
Fabric más allá de lo básico
Fabric más allá de lo básicoFabric más allá de lo básico
Fabric más allá de lo básico
 
Experiencias con PostgreSQL en AWS
Experiencias con PostgreSQL en AWSExperiencias con PostgreSQL en AWS
Experiencias con PostgreSQL en AWS
 
Fabric Fast & Furious edition
Fabric Fast & Furious editionFabric Fast & Furious edition
Fabric Fast & Furious edition
 
Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo lo administras?Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo lo administras?
 
AWS Baby steps circa 2008
AWS Baby steps circa 2008AWS Baby steps circa 2008
AWS Baby steps circa 2008
 
Using Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibanaUsing Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibana
 
Wireshark tips
Wireshark tipsWireshark tips
Wireshark tips
 
Mi experiencia con Amazon AWS EC2 y S3
Mi experiencia con Amazon AWS EC2 y S3Mi experiencia con Amazon AWS EC2 y S3
Mi experiencia con Amazon AWS EC2 y S3
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 

Último (15)

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

Funcional para trollear

Notas del editor

  1. Hablamos de que Valencia == Horchata
  2. No hablar de matemáticas, advertir que se puede ser ofensivo sin querer y las excusas que dan los medios
  3. Nombre, que hago, por si quieren insultar, y donde suelo estar por si quieren secuestrar
  4. Objetivos para hacer todo esto
  5. Hablamos que la programación funcional viene de las matemáticas, alonso church lambda calculo
  6. Relax
  7. Hablar que python no es un lenguaje funcional puro, no tunning recursion, mutable, asignacion, etc
  8. Pero no todo esta perdido si tomamos ideas como la inmutabilidad, los side effects, la composicion, funciones de primer orden, lazyness
  9. Mindset que adquieres usando unix, hablar de pipes, filters, tee, etc
  10. Traducion a map y filter del tipico for con un if
  11. Traducion a map y filter del tipico for con un if
  12. Traducion a map y filter del tipico for con un if
  13. Ejemplo de como usar zip, es muy chorra a este nivel
  14. Ejemplo de como usar zip, es muy chorra a este nivel
  15. Chiste en el que hablas de la memoria del ordenador, no precomputar todo y calcular cosas según se piden
  16. Fail
  17. Algebra de iteradores xD
  18. https://github.com/aebm/docker-image-cleaner/blob/master/di_cleaner.py https://github.com/aebm/shuffler/blob/master/shuffler.py https://github.com/aebm/tools/blob/master/es_janitor.py https://github.com/aebm/tools/blob/master/es_cleaner.py