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

Mit*_*ops 7 python functional-programming map multiprocessing

我目前正在对一组我要并行化的变量进行合并.我的代码看起来像这样:

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)
Run Code Online (Sandbox Code Playgroud)

通常,为了加快长循环,我会用merge之类的东西替换合并列表中的for m.

from multiprocessing import Pool

p = Pool(8)
p.map(merger(m), mergelist)
p.close()
Run Code Online (Sandbox Code Playgroud)

但是因为我正在使用星形来解包元组,所以我不清楚如何正确映射它.我怎么得到的*m

Dan*_*kov 1

您可以在合并函数中解压元组:

def merger(args):
    if len(args) != 4:
         # error
    leftfile,rightfile,leftvarname,outvarname = args
    do_the_merge
Run Code Online (Sandbox Code Playgroud)

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

def merger( (leftfile,rightfile,leftvarname,outvarname) ):
    do_the_merge
Run Code Online (Sandbox Code Playgroud)

编辑:解决OP问题:

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

for m in mergelist:
         print merger(m)
Run Code Online (Sandbox Code Playgroud)

回报

leftfile1rightfile1
leftfile1rightfile1
leftfile2rightfile2
Run Code Online (Sandbox Code Playgroud)