これはばかげた例です:
def add_x_to_input(x,k):
return x + k
myList = [1,2,3,4]
myNewList = map(add_x_to_input???, myList)
に入力関数として渡す場合、 のパラメータx
を指定するにはどうすればよいですか?add_x_to_input
map
これはばかげた例です:
def add_x_to_input(x,k):
return x + k
myList = [1,2,3,4]
myNewList = map(add_x_to_input???, myList)
に入力関数として渡す場合、 のパラメータx
を指定するにはどうすればよいですか?add_x_to_input
map
使用できますfunctools.partial()
:
from functools import partial
map(partial(add_x_to_input, some_value_for_x), myList)
lambda
または、 (匿名のインライン関数)を使用できます。
map(lambda k: add_x_to_input(some_value_for_x, k), myList)
または、明示的な新しい関数を定義できます。
def wrapping_function(k):
return add_x_to_input(some_value_for_x, k)
map(wrapping_function, myList)
あなたが完全なスピードを求めているなら、functools.partial()
アプローチはそのハンズダウンに勝ちます。これは C コードで実装され、追加の Python スタック プッシュを回避します。
>>> import timeit
>>> L = range(10)
>>> def foo(a, b): pass
...
>>> def p(b): return foo(1, b)
...
>>> timeit.timeit('map(p, L)', 'from __main__ import foo, L; from functools import partial; p = partial(foo, 1)')
3.0008959770202637
>>> timeit.timeit('map(p, L)', 'from __main__ import foo, L; p = lambda b: foo(1, b)')
3.8707590103149414
>>> timeit.timeit('map(p, L)', 'from __main__ import foo, L, p')
3.9136409759521484
def add_x_to_input(x,k):
return x + k
myList = [1,2,3,4]
x = 5
myNewList = map(lambda k:add_x_to_input(x,k), myList)
あるいは単に:
myNewList = [x+k for k in myList]
クロージャーを定義します。
In [61]: def add_x_to_input(x,k):
...: return x + k
In [62]: def add_1(x):
...: return add_x_to_input(x,1)
In [63]: add_1(1)
Out[63]: 2
In [64]: list = [1,2,3]
In [65]: map(add_1, list)
Out[65]: [2, 3, 4]