-2

関数内で 2 つの引数を送信し、2 つの値も受け取りたい

このコードを変更して、2 つの引数を送信し、2 つの引数も受信できるようにコーディングしたいと考えています。

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 は、1 または 0 のいずれかの数値を返す関数です。

上記のコードは、1 つの引数を送信するときにジョブを実行できますが、代わりに 2 つの引数を送信したいと考えています。必要な関数の最初の引数は list_value で、2 番目の引数はモデル "net model train it using caffe" です。

だから私は前の関数と同じ仕事をすることができる関数を書きたいと思いますが、1つは[0または1]で、もう1つはこの関数が変更された変更されたモデルです。

4

2 に答える 2

6

各値の新しいモデルではなく、単一のモデルのみが必要であると言うので、これはかなり単純です。変化する:

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

注: を使用するためにlambdas を使用する必要がある場合は、使用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)
于 2016-01-28T15:19:00.763 に答える