j'ai écrit une ligne de code en utilisant lambda pour fermer une liste d'objets de fichiers dans python2.6:Impossible de fermer le fichier de manière fonctionnelle dans python3.1?
map(lambda f: f.close(), files)
Il fonctionne, mais ne pas python3.1. Pourquoi?
Voici mon code de test:
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
Notez également que 2to3 attrape ceci, et listera automatiquement (...) l'appel de carte pour vous, en forçant une évaluation immédiate. –
'N'appliquez jamais de fonction de carte ou de fonction "fonctionnelle" similaire à des fonctions ayant des effets secondaires. Python n'est pas un langage fonctionnel, et ne le sera jamais. Je ne vois pas pourquoi ce ne serait pas un bon conseil même si Python était un langage fonctionnel. Il ne sert à rien d'utiliser la carte si vous n'utilisez pas le résultat - dans n'importe quelle langue. – sepp2k
Dans les langues purement fonctionnelles, les fonctions n'ont pas d'effets secondaires, donc une fonction 'close()' ne peut pas exister. – Philipp