Why does map return a map object instead of a list in Python 3?
<p>I am interested in understanding the <a href="http://stackoverflow.com/questions/1303347/getting-a-map-to-return-a-list-in-python-3-x">new language design of Python 3.x</a>.</p>

<p>I do enjoy, in Python 2.7, the function <code>map</code>:</p>

<pre><code>Python 2.7.12
In[2]: map(lambda x: x+1, [1,2,3])
Out[2]: [2, 3, 4]
</code></pre>

<p>However, in Python 3.x things have changed:</p>

<pre><code>Python 3.5.1
In[2]: map(lambda x: x+1, [1,2,3])
Out[2]: &lt;map at 0x4218390&gt;
</code></pre>

<p>I understand the how, but I could not find a reference to the why. Why did the language designers make this choice, which, in my opinion, introduces a great deal of pain. Was this to arm-wrestle developers in sticking to list comprehensions?</p>

<p>IMO, list can be naturally thought as <a href="http://learnyouahaskell.com/functors-applicative-functors-and-monoids" rel="nofollow">Functors</a>; and I have been somehow been thought to think in this way:</p>

<pre><code>fmap :: (a -&gt; b) -&gt; f a -&gt; f b
</code></pre>

<p>I think the reason why map still exists <em>at all</em> when generator expressions also exist, is that it can take multiple iterator arguments that are all looped over and passed into the function:</p>

<pre><code>&gt;&gt;&gt; list(map(min, [1,2,3,4], [0,10,0,10]))
[0,2,0,4]
</code></pre>

<p>That's slightly easier than using zip:</p>

<pre><code>&gt;&gt;&gt; list(min(x, y) for x, y in zip([1,2,3,4], [0,10,0,10]))
</code></pre>

<p>Otherwise, it simply doesn't add anything over generator expressions.</p>

python python-3.x