使用map和lambda函数发送两个参数并返回两个值

2024-05-26 19:53:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个函数中发送两个参数并接收两个值

我想修改这段代码,以便我的代码能够发送两个参数并接收两个参数

list_value = [ 1, 2,0,-1,-9,2,3,5,4,6,7,8,9,0,1,50]
hnd = map(lambda (valua): function_f(valua), list_value)

函数是返回一个数字1或0的函数。

当发送一个参数时,上面的代码可以完成这项工作,但是我想发送两个而不是。 所需函数的第一个参数是list_value,第二个参数是一个模型“net model train it using caffe”

因此,我想编写一个函数,它可以完成前一个函数的相同工作,但返回两个参数,一个是[0或1],另一个是此函数已修改的修改模型。


Tags: lambda函数代码模型map参数netmodel
2条回答

因为您说您只需要一个模型,而不是每个值都需要一个新模型,所以这相当简单。更改:

hnd = map(lambda (valua): function_f(valua), list_value)

致:

model = ... initialize a model that will be passed to every call ...
hnd = map(lambda valua: function_f(valua, model), list_value)

只要确保function_f同时返回新值和模型,例如,如果它以前返回过:

def function_f(val, model):
    ... calculate newval and make newmodel ...
    return newval

把它改成:

def function_f(val, model):
    ... calculate newval and make newmodel ...
    return newval, newmodel

注意:如果需要使用lambda来使用map,则不要使用map;它不会为您带来任何好处(在大多数映射函数不是内置的CPython的情况下,生成器表达式或列表理解将以相同的速度甚至更快的速度运行)。也就是说,在您的特定情况下,您不需要lambda,例如,您可以:

from future_builtins import map  # Only on Py2; Py3 map is good

from itertools import repeat

model = ... initialize a model that will be passed to every call ...
hnd = map(function_f, list_value, repeat(model))

或者只使用一个生成器表达式(除非该函数是用C语言实现的Python内置函数,map基本上不会获得性能;如果您不想考虑map是否合适,请始终使用列表理解/生成器表达式而不是map是一个好主意):

# Change outside parens to brackets, [], for list comp
hnd = (function_f(x, model) for x in list_value)

通过使用zip,可以将map与此类函数一起使用。我提供了一个示例代码

ls1 = [1,2,3,4,5]
ls2 = [1,2,3,4,5]
>>> def func(x,y):
    return x+1,y+1

>>> map(lambda (v1, v2): func(v1, v2), zip(ls1, ls2))
[(2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]

相关问题 更多 >

    热门问题