使用 map 和 lambda 函数发送两个参数和 return 两个值
Send two argument using map and lambda functions and return two values
我想在一个函数中发送两个参数并接收两个值
我想修改此代码,以便我的代码能够发送两个参数并接收两个参数
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)
function_f 是一个函数 return 一个数字 1 或 0。
上面的代码可以在发送一个参数时完成这项工作,但我想发送两个而不是。
所需函数的第一个参数是 list_value,第二个参数是模型 "net model train it using caffe"
所以我想写一个函数,它可以完成与前一个函数相同的工作,但是 return 有两个参数,一个是 [0 或 1],另一个是这个函数具有的修改模型已修改。
既然你说你只想要一个模型,而不是每个值的新模型,这就相当简单了。变化:
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
returns 新值和模型,例如如果之前有:
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))
或者只使用生成器表达式(除非该函数是 Python 内置的用 C 实现的,map
基本上不会让你获得性能;如果你不想考虑是否map
是合适的,始终使用列表 comprehensions/generator 表达式而不是 map
是个好主意):
# Change outside parens to brackets, [], for list comp
hnd = (function_f(x, model) for x in list_value)
通过使用zip,您可以使用具有此类功能的地图。我正在提供您要求演示的示例代码
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)]
我想在一个函数中发送两个参数并接收两个值
我想修改此代码,以便我的代码能够发送两个参数并接收两个参数
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)
function_f 是一个函数 return 一个数字 1 或 0。
上面的代码可以在发送一个参数时完成这项工作,但我想发送两个而不是。 所需函数的第一个参数是 list_value,第二个参数是模型 "net model train it using caffe"
所以我想写一个函数,它可以完成与前一个函数相同的工作,但是 return 有两个参数,一个是 [0 或 1],另一个是这个函数具有的修改模型已修改。
既然你说你只想要一个模型,而不是每个值的新模型,这就相当简单了。变化:
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
returns 新值和模型,例如如果之前有:
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))
或者只使用生成器表达式(除非该函数是 Python 内置的用 C 实现的,map
基本上不会让你获得性能;如果你不想考虑是否map
是合适的,始终使用列表 comprehensions/generator 表达式而不是 map
是个好主意):
# Change outside parens to brackets, [], for list comp
hnd = (function_f(x, model) for x in list_value)
通过使用zip,您可以使用具有此类功能的地图。我正在提供您要求演示的示例代码
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)]