Python Funzionale

Da Andreabont's Wiki.

In python esistono dei costrutti per semplificare la programmazione tramite il paradigma funzionale.

Strutture dati

Nel paradigma funzionale le strutture dati devono essere immutabili, viene quindi fatto largo uso delle tuple.

Tuple

>>> miaTupla = (1,2,3)
>>> print(miaTupla[1])
2

Namedtuple

>>> miaTupla = collections.namedtuple('miatupla_type', ['a','b'])
>>> dato1 = miaTupla(a = '1', b = 'a')
>>> print(dato1)
miatupla_type(a = '1', b = 'a')

Struttura combinata

>>> miatupla = (miaTupla(a=1, b='a'), miaTupla(a=2, b='b'))
>>> print(miatupla)
(miatupla_type(a=1, b='a'), miatupla_type(a=2, b='b'))

Filter

La funzione filter è usata per filtrare le strutture dati.

>>> mioFiltro = filter(lambda x: x.a == 2, miatupla)
>>> print(tuple(mioFiltro))
(miatupla_type(a=2, b='b'),)

List Comprehensions

Per maggiori informazioni consultare la pagina sulle List Comprehensions.

>>> nuovatupla = tuple(x for x in miatupla if x.a == 2)
>>> print(nuovatupla)
(miatupla_type(a=2, b='b'),)

Map

La funzione map serve ad applicare una trasformazione ad una struttura dati.

>>> miamap = map(lambda x: miaTupla(a=x.a*2, b=x.b), miatupla)
>>> tuple(miamap)
(miatupla_type(a=2, b='a'), miatupla_type(a=4, b='b'))

Reduce

La funzione reduce serve ad applicare un calcolo ad una struttura dati e a ritornare un valore.

>>> from functools import reduce
>>> mioreduce = reduce(lambda x, y: x.a + y.a, miatupla)
>>> mioreduce
3