次のコードはなぜ何も印刷しないのでしょうか:
#!/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 で実行しています。何か非常に基本的なことが抜けていると思うのですが、それがわかりません。
ベストアンサー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)