デフォルトの引数を取る関数があるとします。
def fn(foo=0,bar=1):
return something
疑似コードでマップを作成し、デフォルトの引数を指定するにはどうすればよいですか。
map(fn,foo=[1,2,3])
また:
map(fn,bar=[5,6,7])
デフォルトの引数を取る関数があるとします。
def fn(foo=0,bar=1):
return something
疑似コードでマップを作成し、デフォルトの引数を指定するにはどうすればよいですか。
map(fn,foo=[1,2,3])
また:
map(fn,bar=[5,6,7])
lambda
デフォルトのパラメーターで関数をラップするために使用できます。
map(lambda x: fn(x, bar=[1, 2, 3]), range(5))
正確さのために、partial
使用法は
>>> from functools import partial
>>> def fn(foo=0,bar=1):
... print 'foo {}, bar {}'.format(foo, bar)
...
>>> foo = [1,2,3]
>>> bar = [4,5,6]
>>> map(fn, foo)
foo 1, bar 1
foo 2, bar 1
foo 3, bar 1
[None, None, None]
>>> map(partial(fn, 0), bar)
foo 0, bar 4
foo 0, bar 5
foo 0, bar 6
[None, None, None]
リスト内包表記を使用する方が良いと思います
[foo(bar=i) for i in [1,2,3]]
マップに関しては、私が提案できる唯一の方法は、予想されるキーワード引数で関数を呼び出す関数です
いずれかの専用機能
def wrapper(func, kw):
def wrapped(a):
return func(**{kw: a})
return wrapped
map(wrapper(foo, 'bar'), [1, 2, 3]) # if keyword argument is the same far all calls
またはラムダ
map(lambda x: foo(bar=x), range(5)) # if keyword argument is the same far all calls
map(lambda x: foo(**{y:x}), ['bar', 'foo', 'bar'], range(3)) # if keyword arguments are different all calls