次のコードが何も出力しないのはなぜですか?
#!/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.で実行しています。非常に基本的なものが欠けていると思いますが、理解できません。
map()
はイテレータを返します 、要求されるまで要素を処理しません。
それをリストに変換して、すべての要素を強制的に処理します。
_list(map(self.do_someting,range(10)))
_
または、長さを0に設定してcollections.deque()
を使用し、マップ出力が必要ない場合はリストを作成しません。
_from collections import deque
deque(map(self.do_someting, range(10)))
_
ただし、for
ループを使用するだけで、コードの将来のメンテナにとってはるかに読みやすくなることに注意してください。
_for i in range(10):
self.do_someting(i)
_
Python 3の前に、map()はイテレータではなくリストを返しました。したがって、例はPython 2.7で機能します。
list()は、引数を反復処理して新しいリストを作成します。 (list()は、たとえばタプルからリストへの型変換だけではありません。したがって、list(list((1,2)))は[1,2]を返します。)したがって、list(map(...))はとの下位互換性があります。 Python 2.7。