使用map()时使用*idiom解包参数

use*_*752 2 python map iterable-unpacking

在Python中*使用map内置函数时,有没有办法用习语解包元组?

理想情况下,我想做以下事情:

def foo(a, b):
  return a**2 + b

x = [(1,2), (3,4), (5,6)]

results = map(foo, *x)
Run Code Online (Sandbox Code Playgroud)

结果会相等 [3, 13, 31]

roi*_*ppi 7

您正在寻找itertools.starmap:

def foo(a, b):
  return a**2 + b

x = [(1,2), (3,4), (5,6)]

from itertools import starmap

starmap(foo, x)
Out[3]: <itertools.starmap at 0x7f40a8c99310>

list(starmap(foo, x))
Out[4]: [3, 13, 31]
Run Code Online (Sandbox Code Playgroud)

请注意,即使在python 2中,也会starmap返回一个必须手动使用的迭代list.