Python 3的地图功能不调出功能(Python 3 Map function is not Ca

2019-07-04 06:38发布

为什么不下面的代码打印任何东西:

#!/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()

我在执行上面的代码在Python 3.我觉得我失去了一些东西很基本的,但没能弄明白。

Answer 1:

map()返回迭代 ,直到你问它不会处理元素。

把它变成一个列表来强制处理的所有元素:

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

或使用collections.deque()设置为0,如果你不需要地图输出不产生列表的长度:

from collections import deque

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

但是请注意,只是使用for循环是迄今为止任何将来你的代码的维护更加易读:

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


Answer 2:

Python 3中之前,图()返回一个列表,而不是一个迭代器。 所以,你的例子就是在Python 2.7的工作。

列表()通过遍历其参数创建一个新的列表。 (列表()不只是一个类型转换从说元组到列表,所以列表(列表((1,2)))返回[1,2])。因此列表(地图(...))是具有向下兼容Python 2.7版。



Answer 3:

我只想补充以下内容:

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(默认情况下,2014年3月22日,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(默认情况下,2014年4月11日,13时05分11秒)

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

这差异使得有关简单包装的答案list(...)不完全正确

同样可以用以下方式实现:

>>> import itertools
>>> [[a, b] for a, b in itertools.zip_longest([1, 2, 3], ['a', 'b'])]
[[1, 'a'], [2, 'b'], [3, None]]


文章来源: Python 3 Map function is not Calling up function