web-dev-qa-db-ja.com

Python 3マップ関数が関数を呼び出していません

次のコードが何も出力しないのはなぜですか?

#!/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.で実行しています。非常に基本的なものが欠けていると思いますが、理解できません。

23
Sibi

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)
_
41
Martijn Pieters

Python 3の前に、map()はイテレータではなくリストを返しました。したがって、例はPython 2.7で機能します。

list()は、引数を反復処理して新しいリストを作成します。 (list()は、たとえばタプルからリストへの型変換だけではありません。したがって、list(list((1,2)))は[1,2]を返します。)したがって、list(map(...))はとの下位互換性があります。 Python 2.7。

5
bootchk