2016-11-11 11 views
-2

を関数を呼び出すために、私は以下に定義された関数与えられています:私は、次の入力を繰り返し、この関数を呼び出したいの反復処理を組み合わせ、辞書、再帰的に

def func(dframe, string1, str2, timedel1, bool1, dict1, dict2): 
    ... 

を:

dframe   = dframe 
string1   = 'Cars' 
str2_list  = ['Mercedes', 'BMW', ...] 
timedelArg_list = ['seconds=1', 'seconds=2', 'mintues=2', ...] 
bool1   = False 
dict1_list  = [['Mercedes_color': 'black'], 
        ['BMW_color': 'white']] 
dict2_list  = ['Mercedes_price', 'BMW_price', ...] 

私はこれらの入力がどのように整理されているかを制御していますが、funcを制御できません。

次のように各func呼び出しが見えます:

# First Call 
dframe = func(dframe, string1, str2_list[0], 
       timedelta(timedelArg_list [0]), 
       bool1 = bool1, 
       dict1 = {'FIXED1':dict1_list[0][0], 'FIXED2':dict1_list[0][1]}, 
       dict2 = {dict2_list[0]:'FIXED3'}) 
# Second Call 
dframe = func(dframe, string1, str2_list[1], 
       timedelta(timedelArg_list [1]), 
       bool1 = bool1, 
       dict1 = {'FIXED1':dict1_list[1][0], 'FIXED2':dict1_list[1][1]}, 
       dict2 = {dict2_list[1]:'FIXED3'}) 
# Third Call 
dframe = func(dframe, string1, str2_list[2], 
       timedelta(timedelArg_list [2]), 
       bool1 = bool1, 
       dict1 = {'FIXED1':dict1_list[2][0], 'FIXED2':dict1_list[2][1]}, 
       dict2 = {dict2_list[2]:'FIXED3'}) 
... 

それを行うための最もエレガントな方法は何ですか。

+0

あなたが求めているものは明らかではありません。あなたが 'func'を制御できない場合、これはあなたが行うことができる唯一の方法ではありません...あなたは何をしていますか? – jonrsharpe

+0

コメントありがとう@jonsharpe。私が下に提供した解決策と比較して、より無邪気な方法があるなら、私はものです。 'ast'ライブラリを使用している可能性があります – Rahul

答えて

1

次のようにこれを達成するためのブルートフォース方法は次のとおりです。

for i in enumerate(str2_list): 
    tdelta = eval('timedelta(' + timedelArg_list[i] + ')') 
    dframe = func(dframe, string1, str2_list[i], 
       tdelta, 
       bool1 = bool1, 
       dict1 = {'FIXED1':dict1_list[i][0], 'FIXED2':dict1_list[i][1]}, 
       dict2 = {dict2_list[i]:'FIXED3'}) 
関連する問題