回答:
1つのオプションはリスト内包表記です。
[add(x, 2) for x in [1, 2, 3]]
より多くのオプション:
a = [1, 2, 3]
import functools
map(functools.partial(add, y=2), a)
import itertools
map(add, a, itertools.repeat(2, len(a)))
add()重要な関数の場合
map()どちらの方法にも役立ちません。
map()ような挙動zip_longest()のPython 2に、それは同じように動作している間zip()のPython 3の)
ドキュメントは、これがの主な用途であることを明示的に示唆していますitertools.repeat:
オブジェクトを繰り返し返すイテレータを作成します。times引数が指定されていない限り、無期限に実行されます。
map()呼び出された関数の不変パラメーターの引数として使用されます。zip()タプルレコードの不変部分を作成するためにも使用されます。
そしてlen([1,2,3])、times引数としてパスする理由はありません。map最初のイテラブルが消費されるとすぐに停止するため、無限イテラブルは完全に正常です。
>>> from operator import add
>>> from itertools import repeat
>>> list(map(add, [1,2,3], repeat(4)))
[5, 6, 7]
実際、これはrepeatドキュメントの例と同じです:
>>> list(map(pow, range(10), repeat(2)))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
これは、Pythonイテレータ用語でも完全に読み取り可能な、遅延のある関数型言語の優れたソリューションになります。
def f(x,y,z): \\ return '.'.join([x,y,z])次に:をlist(map(f, list('abc'), repeat('foo'), list('defgh')))返します['a.foo.d', 'b.foo.e', 'c.foo.f']。
repeat()から、map()まで実行されます最長のイテレータはPythonのバージョンに排出されるで埋め、Noneすべての欠損値について。パラメータを渡す理由は「理由がない」と言うのは間違っています。
マップは複数の引数を含むことができ、標準的な方法は
map(add, a, b)
あなたの質問では、それは
map(add, a, [2]*len(a))
時々、クロージャーを使用して同様の状況(pandas.applyメソッドの使用など)を解決しました
それらを使用するには、関数のラッパーを動的に定義して返す関数を定義し、パラメーターの1つを定数にします。
このようなもの:
def add(x, y):
return x + y
def add_constant(y):
def f(x):
return add(x, y)
return f
次に、任意の値add_constant(y)に追加するyために使用できる関数を返します。
>>> add_constant(2)(3)
5
これにより、パラメーターが一度に1つずつ与えられる状況でそれを使用できます。
>>> map(add_constant(2), [1,2,3])
[3, 4, 5]
編集する
どこか他の場所でクロージャ関数を書く必要がない場合は、ラムダ関数を使用してその場でそれを構築する可能性が常にあります。
>>> map(lambda x: add(x, 2), [1, 2, 3])
[3, 4, 5]
本当にマップ関数を使用する必要がある場合(ここでのクラス割り当てのように...)、引数を1つ指定してラッパー関数を使用し、残りを本体の元のラッパーに渡すことができます。すなわち:
extraArguments = value
def myFunc(arg):
# call the target function
return Func(arg, extraArguments)
map(myFunc, itterable)
汚くて醜い、それでもトリックをする
myFuncする必要がありますreturn Func(arg, extraArguments)
Funcは元の関数の名前です-OPの場合、タイトなadd例は次のようになります
で:nums = [1, 2, 3]
で:map(add, nums, [2]*len(nums))
でる:[3, 4, 5]
map(add,[1,2,3],[2]*3)一般的にはmap、最初の引数としての機能を取り込み、この機能がかかるとKの引数を、あなたがフォローアップする必要がK反復可能:addTriple(a,b,c) -> map(addTriple,[...],[...],[...])