2016-05-24 5 views
0

私は、にfoo1()という関数があり、現在のフローにいくつかの変更を加える必要がある場合があります。Pythonのデザインのアスペクトでの関数ポインタの使用

私はこのクラスをファイルからインポートし、fooがオプションのパラメータとして2つの関数ポインタを取得できるようにしました。これは、異なるフローを追加するかどうかを決定します。例えば

ちょうど明確にする新しい関数ポインタである限りfoo(...,func_pointer1 = None,func_pointer2=None)

を元のパラメータ(...)を有するFOOを作り、func_pointer1は流れのいずれの場合に起動する機能を保持する、func_pointer2を追加するために設計されています渡された場合、フローの最後に処理するコードが増えました。

私はこの2つの関数ポインタを渡す方法はあまり一般的ではないと思うし、各関数を渡す必要があります。** kwargsのパラメータも。 これは大丈夫だと誰かが考えているのですか、より合理的な解決策がありますか?

答えて

0

パラメータを持つ関数を2つのリストとして別の関数に渡して、この次の関数にそれらのリストの管理方法を伝えることはできますか?私はSTH同様の操作を行う必要があった、と私はこれをしなかった

def foo(*args): 
    for item in in args: 
     return execute(*item) 

def execute(func, *args): 
    return func(args) 
0

あなたが「関数ポインタ」と呼んで何が実際にPythonで関数だけです。関数は他のものと同じようにオブジェクトなので、好きなだけ関数を渡すこともできます。標準ライブラリでは、これはmax(key=function)やFunctoolsのもの、例えばpartialに使われています。だからあなたがしていることは全く大丈夫です。

* argsと** kwargsを明示的に渡したくない場合は、ラムダまたはpartialを使用できます。