これを行う方法が必要ですmap()
これ:
for inst in list_of_instances:
inst.run()
次のように実行できます。
map(operator.methodcaller('run'), list_of_instances)
これはどのように行うことができmap()
ますか?
for inst in list_of_instances:
inst.some_setting = True
使用できますsetattr
:
map(lambda inst: setattr(inst, 'some_setting', True), list_of_instances)
またはリスト内包表記を使用する:
[setattr(inst, 'some_setting', True) for inst in list_of_instances]
for
ところで、単純なループの方が優れているmap
と思います
for
loop の方が読みやすいです。map
、リスト内包表記バージョンは一時リストを生成します ( [None, None, None, ..., None]
)できますが、お勧めできません。
map
純粋な (不変の) 操作、つまり新しいオブジェクトを返す関数でのみ機能するように設計されています。関数の欠如は、itemsetter
この考えを反映しています。コードはオブジェクトをその場for
で変更するため、代わりにループを使用する必要があります。
map
Python 3 ではlist を返さないため、これは重要です。必要に応じて関数を呼び出す iterator オブジェクトを返します。したがって、Python 3 では、コードはまったく実行されません。
map
vsfor
の区別は、Python に固有のものではありません。JavaScript では、map
とforEach
;があります。Haskell では、 と がmap
ありtraverse
ます。この 2 つの根本的に異なるものを区別することが重要です。