Why map and filter functions return iterator in python3 whereas reduce returns fold operation itself? What all performance/memory gains we get with returning iterator?

Map returns "map" object:

```
>>> numbers = [1,2,3,4,5]
>>> map(lambda x:x*x , numbers)
<map object at 0x103e01f28>

```

Reduce returns me directly the result of fold operation itself

```
>>> words = ['apple', 'pineapple', 'pear', 'mango']
>>> reduce(lambda word1,word2: word1 if len(word1) > len(word2) else word2 ,words)
'pineapple'

```

Whereas filter again returns "filter: object:

```
>>> numbers = [1,2,3,4,5]
>>> filter(lambda x:x%2 == 0,numbers)
<filter object at 0x103e07c18>

```