2017-05-15 32 views
0

私はPythonには新しく、見つからなかった 私はいくつかのアルゴリズムを使用したい川のネットワークを持っていました。関数が異なる入力引数で関数を呼び出す

最初のステップでは、データを読み込んで使用できる方法で処理します。 データをロードして前処理し、それを処理する別の関数を呼び出す関数が必要です。

呼び出すアルゴリズムによっては、異なる入力引数が必要です。 アルゴリズムの引数をロードアルゴリズムに渡す必要があります。

関数がどの引数がアルゴリズム用であるかを知る方法はありますか?

"calc_network(data、algorithm3、inputB)"は私が意図した通りに動作することをコードが知っている方法です。

「calc_network(data、algorithm3,0、inputB、0)」と入力する必要があります。

これで、値が正しくない必要がある場合はブランク値を設定する必要がありますか?

私は問題について正しい考え方をしていますか、何か基本的な誤解がありますか?

事前 に感謝レオ

+0

なぜあなたはすべての定義されていますこれらの関数は*内部* 'cal c_network'? – chepner

答えて

0

あなたは考えていないようなネスト機能。複数の関数を持ち、親関数から子関数を呼び出します。

def functionA(foo): 
    do stuff 
def functionB(foo): 
    do stuff 
def functionC(foo): 
    do stuff using functionA or functionB 

あなたの話題に似た構造で機能を維持したい場合は、おそらくクラスを検討したいと思うでしょう。

class Foo(object): 
    def __init__(self, your, data, arguments): 
     Determine which function to send data to 
     self.data = call function(s) and get the data. 
    def algorithm1(self, processedData, inputA, inputB) 
     return results 
    def algorithm2(self, processedData, inputA, inputC) 
     return results 
    def algorithm3(self, processedData, inputB) 
     return results 

このように、データを必要とするときは、クラスをインスタンス化することでそれを行うことができます。

foo = Foo(your, data, arguments) 

次に、あなたの結果がでアクセスできるようになります:

foo.data 
1

functools.partialを使用して、このアプローチを試してみてください:

from functools import partial 

def algorithm1(data, input_a, input_b): 
    return 'algorithm1 result' 

def algorithm2(data, input_a, input_c): 
    return 'algorithm2 result' 

def algorithm3(data, input_b): 
    return 'algorithm3 result' 

def calc_network(data, algorithm): 
    def process_data(data): 
     return 'processed {}'.format(data) 
    processed_data = process_data(data) 
    return algorithm(processed_data), processed_data 

print(calc_network('data1', partial(algorithm1, input_a=1, input_b=2))) 
print(calc_network('data2', partial(algorithm2, input_a=1, input_c=3))) 
print(calc_network('data3', partial(algorithm3, input_b=2))) 

これが生成されます。

('algorithm1 result', 'processed data1') 
('algorithm2 result', 'processed data2') 
('algorithm3 result', 'processed data3') 
関連する問題