1

これを行う方法が必要です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
4

2 に答える 2

4

使用できます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と思います

  • forloop の方が読みやすいです。
  • map、リスト内包表記バージョンは一時リストを生成します ( [None, None, None, ..., None])
于 2013-10-15T02:08:14.760 に答える
2

できますが、お勧めできません。

map純粋な (不変の) 操作、つまり新しいオブジェクトを返す関数でのみ機能するように設計されています。関数の欠如は、itemsetterこの考えを反映しています。コードはオブジェクトをその場forで変更するため、代わりにループを使用する必要があります。

map Python 3 ではlist を返さないため、これは重要です。必要に応じて関数を呼び出す iterator オブジェクトを返します。したがって、Python 3 では、コードはまったく実行されません。

mapvsforの区別は、Python に固有のものではありません。JavaScript では、mapforEach;があります。Haskell では、 と がmapありtraverseます。この 2 つの根本的に異なるものを区別することが重要です。

于 2013-10-15T03:58:50.150 に答える