迭代列表、dict等的组合以递归方式调用函数

2024-06-25 22:58:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到一个定义如下的函数:

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'})
...

最优雅的方法是什么


Tags: callmercedeslisttimedeltafuncstring1str2dframe
1条回答
网友
1楼 · 发布于 2024-06-25 22:58:19

实现这一点的暴力方式如下:

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'})

相关问题 更多 >