Perché Python non è molto utile per la programmazione funzionale?


Answers

Guido ha una buona spiegazione di questo here . Ecco la parte più rilevante:

Non ho mai considerato Python come fortemente influenzato dai linguaggi funzionali, indipendentemente da ciò che la gente dice o pensa. Avevo molta più familiarità con i linguaggi imperativi come C e Algol 68 e sebbene avessi realizzato funzioni di oggetti di prima classe, non ho visto Python come un linguaggio di programmazione funzionale. Tuttavia, in precedenza, era chiaro che gli utenti volevano fare molto di più con elenchi e funzioni.

...

Vale anche la pena notare che, anche se non immaginavo Python come linguaggio funzionale, l'introduzione delle chiusure è stata utile nello sviluppo di molte altre funzionalità di programmazione avanzate. Ad esempio, alcuni aspetti di classi, decoratori e altre funzioni moderne dipendono da questa capacità.

Infine, anche se nel corso degli anni sono state introdotte numerose funzionalità di programmazione funzionale, a Python mancano ancora alcune funzionalità che si trovano nei linguaggi di programmazione funzionale "reali". Ad esempio, Python non esegue determinati tipi di ottimizzazioni (ad esempio, ricorsione della coda). In generale, poiché la natura estremamente dinamica di Python, è impossibile eseguire il tipo di ottimizzazione in fase di compilazione, nota da linguaggi funzionali come Haskell o ML. E va bene.

Tiro due cose da questo:

  1. Il creatore della lingua non considera Python come un linguaggio funzionale. Pertanto, è possibile vedere le funzionalità "funzionali-esque", ma è improbabile che si veda qualcosa che è definitivamente funzionale.
  2. La natura dinamica di Python inibisce alcune delle ottimizzazioni che vedi in altri linguaggi funzionali. Certo, Lisp è altrettanto dinamico (se non più dinamico) come Python, quindi questa è solo una spiegazione parziale.
Question

Ho sempre pensato che la programmazione funzionale potesse essere eseguita in Python. Pertanto, sono rimasto sorpreso dal fatto che Python non abbia ricevuto molte menzioni in this domanda e, quando è stato menzionato, normalmente non era molto positivo. Tuttavia, non sono state fornite molte ragioni per questo (la mancanza di corrispondenza dei modelli e tipi di dati algebrici sono stati menzionati). Quindi la mia domanda è: perché Python non è molto buono per la programmazione funzionale? Ci sono più motivi della sua mancanza di corrispondenza dei pattern e tipi di dati algebrici? Oppure questi concetti sono così importanti per la programmazione funzionale che un linguaggio che non li supporta può essere classificato solo come un linguaggio di programmazione funzionale di seconda scelta? (Tieni presente che la mia esperienza con la programmazione funzionale è piuttosto limitata).




Python è quasi un linguaggio funzionale. È "funzionale".

Ha caratteristiche extra, quindi non è abbastanza puro per alcuni.

Manca anche alcune funzionalità, quindi non è abbastanza completo per alcuni.

Le funzionalità mancanti sono relativamente facili da scrivere. Guarda i post come this su FP in Python.




Un'altra ragione non menzionata sopra è che molte funzioni e metodi built-in di tipi built-in modificano un oggetto ma non restituiscono l'oggetto modificato. Il codice funzionale sarebbe più pulito e più conciso. Ad esempio, se some_list.append (some_object) ha restituito some_list con some_object aggiunto.




Non chiamerei Python "funzionale", ma ogni volta che programma in Python il codice finisce invariabilmente per essere quasi puramente funzionale.

Certo, ciò è dovuto principalmente alla comprensione della lista estremamente bella. Quindi non suggerirei necessariamente Python come un linguaggio di programmazione funzionale, ma suggerirei una programmazione funzionale per chiunque usi Python.