使用地图功能评估函数时如何使用 kwarg 参数

How to use kwarg arguments when evaluating a function using map functionality

下面是一个 test 方法的示例,它使用 for 循环和 kwarg 参数进行评估。

def test(first_arg='_', second_arg='_'):
    return 'first_arg: %s\t second_arg: %s' % (first_arg, second_arg)

strings = ['a', 'b', 'c', 'd', 'e']

for s in strings:
    print(test(second_arg=s))

如何使用地图功能实现相同的结果? 也就是说,如何将 kwarg 传递给 map 函数?:

for i in map(test, strings):
    print(i)

无法更改 test 函数中参数的顺序,并且传递所有参数是不可接受的。也就是说,不需要以下地图等效解决方案:

# Passing two arguments is not a desired solution.
for s in strings:
    print(test(first_arg='_', second_arg=s))

# Editing the order of kwargs is also not possible.
def test(second_arg='_', first_arg='_'):
    return 'first_arg: %s\t second_arg: %s' % (first_arg, second_arg)

for s in strings:
    print(test(s))

您可以使用 lambda 创建一个新函数,该函数使用其唯一参数 x :

second_arg=x 调用 test()
for i in map(lambda x: test(second_arg=x),  strings):
    print(i)

输出:

first_arg: _     second_arg: a
first_arg: _     second_arg: b
first_arg: _     second_arg: c
first_arg: _     second_arg: d
first_arg: _     second_arg: e

与此相同:

for s in strings:
    print(test(second_arg=s))

输出:

first_arg: _     second_arg: a
first_arg: _     second_arg: b
first_arg: _     second_arg: c
first_arg: _     second_arg: d
first_arg: _     second_arg: e

或者,您可以定义辅助函数。这相当于上面 lambda 的解决方案:

def call_with_second(x):
    return test(second_arg=x)

for i in map(call_with_second,  strings):
    print(i)

输出:

first_arg: _     second_arg: a
first_arg: _     second_arg: b
first_arg: _     second_arg: c
first_arg: _     second_arg: d
first_arg: _     second_arg: e