4

假设我有一些采用默认参数的函数:

def fn(foo=0,bar=1):
    return something

如何在伪代码中创建地图并指定哪些默认参数:

map(fn,foo=[1,2,3])

或者:

map(fn,bar=[5,6,7])
4

3 回答 3

10

您可以使用lambda默认参数包装函数:

map(lambda x: fn(x, bar=[1, 2, 3]), range(5))
于 2013-11-08T14:27:29.577 回答
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]
于 2013-11-08T14:52:53.610 回答
1

我认为最好使用列表理解

[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 
于 2013-11-08T14:51:31.703 回答