Sib*_*ibi 19 python functional-programming python-3.x map-function
为什么以下代码不打印任何内容:
#!/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()
Run Code Online (Sandbox Code Playgroud)
我正在Python 3中执行上面的代码.我想我错过了一些非常基本但却无法解决的问题.
Mar*_*ers 35
map()
返回一个迭代器,在你要求之前不会处理元素.
将其转换为列表以强制处理所有元素:
list(map(self.do_someting,range(10)))
Run Code Online (Sandbox Code Playgroud)
collections.deque()
如果您不需要地图输出,请使用长度设置为0以不生成列表:
from collections import deque
deque(map(self.do_someting, range(10)))
Run Code Online (Sandbox Code Playgroud)
但请注意,for
对于代码的任何未来维护者来说,简单地使用循环更具可读性:
for i in range(10):
self.do_someting(i)
Run Code Online (Sandbox Code Playgroud)
在 Python 3 之前, map() 返回一个列表,而不是一个迭代器。所以你的例子可以在 Python 2.7 中工作。
list() 通过迭代其参数来创建一个新列表。( list() 不仅仅是从 say tuple 到 list 的类型转换。所以 list(list((1,2))) 返回 [1,2]。)所以 list(map(...)) 向后兼容蟒蛇 2.7。