Compartiremos un poco de nuestra experiencia de Python con este toque especial de la programación funcional y sus diferencias con el enfoque tradicional a través de una serie de ejemplos.
Este lenguaje hoy en día está ganando más popularidad y en este meetup mostraremos el por qué además de cómo alcanzar el Zen en Python.
4. Qué es programación funcional?
● State-less
● Inmutable
● Declarativa
● Sistema de tipos
● Funciones de orden superior
● Funciones puras
5. Funciones puras
A = 4
def impure_sum(b):
return A + b
def pure_sum(a, b):
return a + b
impure_sum(6)
pure_sum(4, 6)
6. Funciones como argumento
def add(x, y):
return x + y
def calculate(f, x, y):
return f(x, y)
calculate(add, 5, 5)
calculate(lambda x, y: x + y, 5, 5)
Expresión λ:
Función Anónima
7.
8. Funciones de orden superior: map
new_list = []
for value in values:
new_list.append(value * 2)
new_list = [x * 2 for x in values]
9. Funciones de orden superior: filter
new_list = []
for value in values:
if value % 2 == 0:
new_list.append(value)
new_list = [x for x in values if x % 2 == 0]
10. List comprehensions?
list(map(lambda x: x * 2, values))
list(filter(lambda x: x % 2 == 0, values))
[x * 2 for x in values]
[x for x in values if x % 2 == 0]
11. Funciones de orden superior: reduce
total = 0
for value in values:
total += value
from functools import reduce
total = reduce(lambda accum, current: accum + current, values, 0)
12. Partials
def add_two(b):
return add(2, b)
print(add_two(10))
from functools import partial
add_two = partial(add, 2)
print(add_two(10))
Demo
def add(a, b):
return a + b
15. Generators
● “yield” keyword
● Retorna un iterador / puede ser infinito
● Recuerda el local scope
● Es perezoso
● Demo: https://repl.it/@po5i/PythonMeetupGenerators
16. Type Annotations
● No se realiza chequeo antes de la ejecución
● Chequeo estático con mypy
● Docs: https://docs.python.org/3/library/typing.html
● Demo: https://github.com/po5i/python-and-types
17. ● Compose
● Pipe
● Curry
● Fold
● Y más funciones todavía
● Demo
Librerías funcionales: toolz