me escribió una línea de código usando lambda para cerrar una lista de objetos de archivo en python2.6:¿No se pudo cerrar el archivo de manera funcional en python3.1?
map(lambda f: f.close(), files)
Funciona, pero no lo hace en python3.1. ¿Por qué?
Aquí está mi código de prueba:
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
Tenga en cuenta también que 2to3 capta esto, y automáticamente hará una lista (...) de la llamada del mapa para usted, forzando la evaluación inmediata. –
'Nunca aplique el mapa o funciones "funcionales" similares a las funciones con efectos secundarios. Python no es un lenguaje funcional, y nunca lo será ". No veo por qué esto no sería un buen consejo, incluso si Python fuera un lenguaje funcional. Simplemente no tiene sentido usar el mapa si no va a utilizar el resultado, en cualquier idioma. – sepp2k
En las funciones de idiomas puramente funcionales las funciones no tienen efectos secundarios, por lo que una función 'close()' no puede existir. – Philipp