Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有默认参数的Python映射_Python - Fatal编程技术网

带有默认参数的Python映射

带有默认参数的Python映射,python,Python,假设我有一个接受默认参数的函数: def fn(foo=0,bar=1): return something 如何创建映射并在伪代码中指定哪些默认参数: map(fn,foo=[1,2,3]) 或: 您可以使用lambda使用默认参数包装函数: map(lambda x: fn(x, bar=[1, 2, 3]), range(5)) 我认为最好使用列表理解 [foo(bar=i) for i in [1,2,3]] 至于map,我唯一能建议您使用的方法是函数,它将使用预期的关键

假设我有一个接受默认参数的函数:

def fn(foo=0,bar=1):
    return something
如何创建映射并在伪代码中指定哪些默认参数:

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


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

map(lambda x: fn(x, bar=[1, 2, 3]), range(5))

我认为最好使用列表理解

[foo(bar=i) for i in [1,2,3]]
至于map,我唯一能建议您使用的方法是函数,它将使用预期的关键字参数调用您的函数

或者是专用功能

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 

为了正确起见,
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]

您能澄清一下您想做什么吗?这不是在iterable上映射函数,而是试图以某种方式将参数传递给函数。@SimeonVisser有区别吗?是的,因为
map()
不打算将参数传递给不同的关键字参数。如果您总是将数字传递给
foo
,并且将
bar=1
作为带有默认参数的参数,那么我们将有效地使用
map()
@MikeVella,您接受了mtitan8答案,但在我看来,它没有给出您的问题和伪代码所要求的输出。请澄清您到底想要实现什么(例如,当提供样本fn的输出时,请参阅我的答案)列表理解遇到了一个障碍,因为我想多线程处理此地图。谢谢,有几个很好的答案,但我发现您的答案是我的首选答案,因为它不依赖外部模块,只“感觉”对。@Kevin:说得好,我更新了答案,改用
fn
作为函数。
>>> 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]