Ho scritto una riga di codice utilizzando lambda per chiudere un elenco di oggetti di file in python2.6:Impossibile chiudere il file in modo funzionale in python3.1?
map(lambda f: f.close(), files)
Funziona, ma non lo fa in python3.1. Perché?
Ecco il mio codice di prova:
import sys
files = [sys.stdin, sys.stderr]
for f in files: print(f.closed) # False in 2.6 & 3.1
map(lambda o : o.close(), files)
for f in files: print(f.closed) # True in 2.6 but False in 3.1
for f in files: f.close()
for f in files: print(f.closed) # True in 2.6 & 3.1
Nota anche che 2to3 lo rileva e automaticamente elencherà (...) la richiesta di mappa per te, forzando una valutazione immediata. –
'Non applicare mai mappe o funzioni "funzionali" simili a funzioni con effetti collaterali. Python non è un linguaggio funzionale e non lo sarà mai. ' Non vedo perché questo non sarebbe un buon consiglio anche se Python fosse un linguaggio funzionale. Semplicemente non serve usare la mappa se non si utilizzerà il risultato, in nessuna lingua. – sepp2k
Nelle lingue puramente funzionali le funzioni non hanno effetti collaterali, quindi una funzione 'close()' non può esistere. – Philipp