2010-01-19 10 views
9

Ho visto alcuni frammenti di python eleganti utilizzando la comprensione delle liste e la riduzione della mappa. Puoi condividere parte di questo codice o di un sito web.snippet di programmazione funzionale Python

Grazie.

+10

Buona domanda, ma ** wiki della comunità **! –

risposta

2

Ecco rapida sorta:

def qsort (list): 
    if (len(list) > 1): 
     list = qsort(filter (lambda x: x <= list[0], list[1:])) + [list[0]] + qsort(filter (lambda x: x > list[0], list[1:])) 
    return list 

Questa è una soluzione di un puzzle programmazione di trovare un numero mancante tra gli interi da 1 a 100:

from random import randint 
nos = range(1,101) 
to_remove = randint(1,100) 
nos.remove(to_remove) 
print "Removed %d from list" % to_remove 

found = 5050 - reduce (lambda x,y: x+y, nos) 
print "You removed %d " % found 
7

Python non è chiaro. Per favore, non cercare di farlo sembrare così. Riduce solo uno dei maggiori punti di forza di Python, che è la sua leggibilità e comprensibilità in seguito.

Se ti piace la programmazione funzionale, scopri Haskell, ML o F#. Sarai sorpreso di ciò che offrono quelle lingue (funzioni pure per iniziare).

+0

Sono d'accordo su ML - spesso trascurato – zebrabox

3

Fare attenzione quando si programma Python in stile funzionale. L'unica ragione per farlo è la leggibilità. Se l'algoritmo è espresso in modo più elegante dal punto di vista funzionale che imperativo, e non causa problemi di prestazioni (di solito non lo fa), allora va avanti.

Tuttavia, python non ottimizza la ricorsione della coda e ha un limite fisso di ricorsione di 1000, quindi generalmente non è possibile eseguire la ricorsione O (n), solo O (log (n)).

Inoltre, reduce() viene rimosso in python 3, per una buona ragione (http://www.artima.com/weblogs/viewpost.jsp?thread=98196). La maggior parte degli usi non banali di riduzione sono più leggibili come un normale ciclo invece di una riduzione e sum() è già integrato.

+0

'ridurre' è ancora in' functools' però. – max

Problemi correlati