Python 3 Map function is not Calling up function

Sibi picture Sibi · Nov 29, 2012 · Viewed 15.3k times · Source

Why doesn't following code print anything:

#!/usr/bin/python3
class test:
    def do_someting(self,value):
        print(value)
        return value

    def fun1(self):
        map(self.do_someting,range(10))

if __name__=="__main__":
    t = test()
    t.fun1()

I'm executing the above code in Python 3. I think i'm missing something very basic but not able to figure it out.

Answer

Martijn Pieters picture Martijn Pieters · Nov 29, 2012

map() returns an iterator, and will not process elements until you ask it to.

Turn it into a list to force all elements to be processed:

list(map(self.do_someting,range(10)))

or use collections.deque() with the length set to 0 to not produce a list if you don't need the map output:

from collections import deque

deque(map(self.do_someting, range(10)))

but note that simply using a for loop is far more readable for any future maintainers of your code:

for i in range(10):
    self.do_someting(i)