由于您说您只想要一个模型,而不是每个值的新模型,因此这相当简单。改变:
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
s来使用map
,不要使用map
; 它不会给你带来任何好处(在映射函数不是 CPython 内置的大多数情况下,生成器表达式或列表推导将以相同的速度运行,甚至更快)。也就是说,在您的特定情况下,您不需要 a 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
is好主意):
# Change outside parens to brackets, [], for list comp
hnd = (function_f(x, model) for x in list_value)