Una cosa veramente importante per questa domanda (e le risposte) è la seguente: che diavolo è la programmazione funzionale e quali sono le sue proprietà più importanti. Proverò a darmi il mio punto di vista:
La programmazione funzionale è molto simile alla scrittura di matematica su una lavagna. Quando si scrivono equazioni su una lavagna, non si pensa a un ordine di esecuzione. Non c'è (in genere) nessuna mutazione. Non torni il giorno dopo e non lo guardi, e quando esegui di nuovo i calcoli, ottieni un risultato diverso (o potresti, se hai bevuto del caffè fresco :)). Fondamentalmente, quello che è alla lavagna è lì, e la risposta era già lì quando hai iniziato a scrivere le cose, non hai ancora capito di cosa si tratta ancora.
La programmazione funzionale è molto simile; non cambi le cose, devi solo valutare l'equazione (o in questo caso "programma") e capire qual è la risposta. Il programma è ancora lì, non modificato. Lo stesso con i dati.
Vorrei classificare quanto segue come le caratteristiche più importanti della programmazione funzionale: a) trasparenza referenziale - se si valuta la stessa affermazione in un altro momento e luogo, ma con gli stessi valori variabili, significherà comunque lo stesso. b) nessun effetto collaterale - non importa per quanto tempo fissi la lavagna, l'equazione che un altro ragazzo sta guardando un'altra lavagna non cambierà accidentalmente. c) anche le funzioni sono valori. che possono essere passati in giro e applicati con o verso altre variabili. d) composizione della funzione, puoi fare h = g · f e quindi definire una nuova funzione h (..) che equivale a chiamare g (f (..)).
Questa lista è nel mio ordine prioritario, quindi la trasparenza referenziale è la più importante, seguita da nessun effetto collaterale.
Ora, se passi attraverso Python e controlli quanto bene il linguaggio e le librerie supportano e garantiscono questi aspetti, allora sei sulla buona strada per rispondere alla tua domanda.