Estoy interesado en la comprensión del nuevo lenguaje de diseño de Python 3.x .
Disfruto, en Python 2.7, la función map
:
Python 2.7.12
In[2]: map(lambda x: x+1, [1,2,3])
Out[2]: [2, 3, 4]
Sin embargo, en Python 3.x las cosas han cambiado:
Python 3.5.1
In[2]: map(lambda x: x+1, [1,2,3])
Out[2]: <map at 0x4218390>
Entiendo el cómo, pero no pude encontrar una referencia al por qué. ¿Por qué los diseñadores de lenguajes tomaron esta decisión, que, en mi opinión, presenta un gran dolor? ¿Fue esto para luchar con los desarrolladores al ceñirse a las listas de comprensión?
OMI, la lista se puede pensar naturalmente como Functors ; y de alguna manera se ha pensado que pienso de esta manera:
fmap :: (a -> b) -> f a -> f b
fuente
map
simplemente iteraron sobre el resultado. Crear una lista cuando no la necesita es ineficaz, por lo que los desarrolladores decidieron hacerlamap
floja. Hay mucho que ganar aquí para el rendimiento y no mucho que perder (si necesita una lista, solo pida una ...list(map(...))
).