Python 3 Map function is not Calling up function

前端 未结 3 840
南旧
南旧 2020-12-03 06:49

Why doesn\'t following code print anything:

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

    de         


        
相关标签:
3条回答
  • 2020-12-03 07:31

    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)
    
    0 讨论(0)
  • 2020-12-03 07:42

    I just want to add the following:

    With multiple iterables, the iterator stops when the shortest iterable is exhausted [ https://docs.python.org/3.4/library/functions.html#map ]

    Python 2.7.6 (default, Mar 22 2014, 22:59:56)

    >>> list(map(lambda a, b: [a, b], [1, 2, 3], ['a', 'b']))
    [[1, 'a'], [2, 'b'], [3, None]]
    

    Python 3.4.0 (default, Apr 11 2014, 13:05:11)

    >>> list(map(lambda a, b: [a, b], [1, 2, 3], ['a', 'b']))
    [[1, 'a'], [2, 'b']]
    

    That difference makes the answer about simple wrapping with list(...) not completely correct

    The same could be achieved with:

    >>> import itertools
    >>> [[a, b] for a, b in itertools.zip_longest([1, 2, 3], ['a', 'b'])]
    [[1, 'a'], [2, 'b'], [3, None]]
    
    0 讨论(0)
  • 2020-12-03 07:52

    Before Python 3, map() returned a list, not an iterator. So your example would work in Python 2.7.

    list() creates a new list by iterating over its argument. ( list() is NOT JUST a type conversion from say tuple to list. So list(list((1,2))) returns [1,2]. ) So list(map(...)) is backwards compatible with Python 2.7.

    0 讨论(0)
提交回复
热议问题