如何使用带*参数的映射在python函数中解包元组

2024-09-27 23:25:48 发布

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

我目前正在对一组要并行化的变量进行合并。我的代码如下所示:

mergelist = [
  ('leftfile1', 'rightfile1', 'leftvarname1', 'outputname1'),
  ('leftfile1', 'rightfile1', 'leftvarname2', 'outputname2')
  ('leftfile2', 'rightfile2', 'leftvarname3', 'outputname3')
]

def merger(leftfile,rightfile,leftvarname,outvarname):
   do_the_merge

for m in mergelist:
     merger(*m)

通常,为了加速长循环,我将mergelist中的for m替换为类似于。。。。在

^{pr2}$

但是由于我使用星来解包元组,所以我不清楚如何正确地映射它。如何获得*m?在


Tags: 代码fordefmergeroutputname1mergelistleftvarname3outputname2
3条回答

使用lambda

with Pool(8) as p:
    p.map(lambda m:merger(*m), mergelist)

您可以在merge函数中解压缩元组:

def merger(args):
    if len(args) != 4:
         # error
    leftfile,rightfile,leftvarname,outvarname = args
    do_the_merge

另一个选项是在参数列表中解压缩:

^{pr2}$

编辑:要解决操作问题:

def merger((l,r,v,o)):
    return l+r

for m in mergelist:
         print merger(m)

退货

leftfile1rightfile1
leftfile1rightfile1
leftfile2rightfile2

IMHO最简单的解决方案是更改合并函数,或添加包装:

def merger(leftfile,rightfile,'leftvarname','outvarname'):
    do_the_merge

def merger_wrapper(wrapper_tuple):
    merger(*wrapper_tuple)

p.map(merger_wrapper, mergelist)

我看到@delnan实际上也在评论中提出了这个解决方案。在

为了增加一点价值:)你也可以这样包装它:

^{pr2}$

这可以让你简化到

p.map(unpack_wrapper(merger), mergelist)

相关问题 更多 >

    热门问题