各値の新しいモデルではなく、単一のモデルのみが必要であると言うので、これはかなり単純です。変化する:
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 組み込みではないほとんどの場合、ジェネレーター式またはリスト内包表記は同じ速度またはそれ以上の速度で実行されます)。とはいえ、特定のケースでは は必要ありません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
基本的にパフォーマンスが向上することはありません。適切かどうかを考えたくない場合は、 is のmap
代わりに常にリスト内包表記/ジェネレーター式を使用します)。map
良いアイデア):
# Change outside parens to brackets, [], for list comp
hnd = (function_f(x, model) for x in list_value)