32

そんなこと知ってる

map(function, arguments)

と同等です

for argument in arguments:
    function(argument)

map 関数を使用して次のことを行うことはできますか?

for arg, kwargs in arguments:
    function(arg, **kwargs)
4

4 に答える 4

32

ラムダで次のことができます。

map(lambda a: function(a[0], **a[1]), arguments)

または、必要に応じて、ジェネレーター式またはリスト内包表記を使用できます。

(function(a, **k) for a, k in arguments)
[function(a, **k) for a, k in arguments]

Python 2 ではmap()、リストを返します (したがって、リスト内包表記は同等です)。Python 3 では、map()はジェネレーターです (したがって、ジェネレーター式で置き換えることができます)。

これを直接行う組み込みまたは標準ライブラリのメソッドはありません。ユースケースが特殊すぎる。

于 2013-06-01T15:25:51.517 に答える
20

位置引数のみの場合は、次を使用できますitertools.starmap(fun, args)

指定されたシーケンスから取得した引数タプルで評価された関数から値が返される反復子を返します。

例:

from itertools import starmap

def f(i, arg):
    print(arg * (i+1))

for _ in starmap(f, enumerate(["a", "b", "c"])):
    pass

プリント:

a
bb
ccc
于 2015-02-21T20:09:36.120 に答える
3

map は引数を個別の引数ではなく 1 つのタプルとして関数に渡すことを覚えておく必要があります。元の関数を変更できない場合は、ヘルパー関数を使用して呼び出すことができます。

def f(tup):
    args, kwargs = tup
    function(args, **kwargs)

map(f, arguments)
于 2013-06-01T15:30:36.980 に答える