2017-03-20 1 views
0

私は、一連の関数呼び出しがあるとします。私は、ある関数から他の定義された関数へ、可変ではない整数の引数を渡そうとしています。私の間違いは何ですか?

def func1(pick, arg1, arg2): 
    if pick == 1: 
     do stuff with arg1 and arg2 
    elif pick == 2: 
     do other stuff with arg1 and arg2 
    return stuff that got done 

def func2(pick, arg1, arg2, arg3): 
    if pick == 1: 
     do stuff with arg1 and arg2 and arg3 
    elif pick == 2: 
     do other stuff with arg1 and arg2 and arg3 
    return stuff that got done 

def func3(pick, func2, arg3): 
    if pick == 1: 
     do stuff with funcs and arg3 
    elif pick == 2: 
     do other stuff with funcs and arg3 
    return stuff that done 
etc .. 

Iは引数可変なかったことを保証するようにscipyのダウンロードquad(数値積分)を介して別の関数から引数を渡すことができました。私はまた、ある関数から別の関数へ引数を渡すことができました。これは、引数であるSCIPY minimize(最適化)です。私の問題は、変更不可能な入力pickをある関数から別の関数に渡すことです。私は上記の単純な例では、定義された各関数の最初の行としてprint(pick)を配置する、と私は

callme = func3(2 , func2(pick = pick, args) , [6, 0.5]) 

としての機能のこのチェーンを呼び出すしていたならば、私のコードは、最終的に読み込みエラーメッセージを吐き出すだろうだったら

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

が、最初のそれはのようなものだろう:なぜこの出来事で、それが入力を送信することが可能になる方法/

1 
2 
1 
2 
2 # (from pick = 2 in func3) 
[6 0.5] 

を関数呼び出しのチェーン内のある関数から別の関数に?

編集:私の推測では、クラスのオブジェクトとしてpickを渡すか、またはkwargsを使用するか、単一の要素からなるunpackableタプルとしてpickを渡します。これが正しいのか、これを実装するのかは分かりません。理想的には、それがわからないいくつかの操作がcallme = func3(pick.func2 , func2, [6, 0.5])という単純なものです。私はpickglobalと宣言しようとしましたが、この結果、パラメータがグローバルであるというエラーメッセージが表示されます。

答えて

0

私はすべての機能から入力としてpickを削除しましたが、機能として変数として残しました。私はその後、を初期化する関数チェーンの前に次のコードを配置しました。関数チェーンの後

def selectdist(pick): 
    ## 1 for original representation 
    ## 2 for normal representation on semilog(x) axis 
    ## 3 for normal representation on linearly-spaced ln(x) axis 
    return int(pick) 

pickdist = selectdist(3) # choose 1 2 or 3 

、一つは再初期化さpickを使用して関数チェーンを実行します。関数チェーンの最上位から下に渡された引数ではなくなったので、バグのソースはなくなりました。

関連する問題