Conceptos básicos para

ser funcional en

python

El mundo es llevado sobre una tortuga gigante, que a su vez va en la espalda de otra tortuga gigante, y esa tortuga está sobre otra tortuga gigante.

Estados inmutables

  • Simplicidad
  • Limpieza
  • Predecible
  • No efectos secundarios (sin efectos secundarios)
  • Rendimiento optimo en gran cantidad de casos

Funciones 

Requerimientos:

  • De primera clase - las funciones son tratadas como valor 
  • De orden superior - las funciones son aplicadas como argumento o retorno de otras funciones.
 z = lambda x: x + x
def x4(x):
   return lambda y: x(y) * 2
 
x4(4)
>> <function x4.<locals>.<lambda> at 0x7f6ef78b7620>

x4(z)(3)
>> 12

Aplicación parcial

Produce una nueva función cuando los argumentos no están completos.

 

from functools import partial
basetwo = partial(int, base=2)
basetwo.__doc__ = 'Convert base 2 string to an int.'
basetwo('10010')
>>18

Inmutabilidad

En el caso de Python no existen estructuras pero podemos utilizar tuplas.

from collections import namedtuple
Point = namedtuple('Point', 'x y')
pt1 = Point(1.0, 5.0)
pt2 = Point(2.5, 1.5)

from math import sqrt
line_length = sqrt((pt1.x-pt2.x)**2 + (pt1.y-pt2.y)**2)

Composición

Es el encadenamiento de funciones para generar un nuevo valor.

from fn import F

F(int)
>> <fn.func.F object at 0x7f58b0f3c3d8>

F(int) << F(str)
>> <fn.func.F object at 0x7f58b0f3c618>

c = F(int) << F(str)
c(111)
>> 111

str(111)
>> '111'

int(str(111))
>> 111

¿Qué sigue?

  • Functors
  • Monoids
  • Monads
  • Lens
Made with Slides.com