Python 2.7 Itertools Starmap

时间:2012-08-14 11:52:51

标签: python map itertools

有一个函数func,它带有两个字符串参数,第一个可以工作,但是根据itertools文档,第二个不应该工作吗?该函数当前打印一个随机字符串作为回报,但在第二个没有任何内容打印

func(*("dog", "cat")) //works

itertools.starmap(func, [("dog", "cat")]) //fails without error message, nothing gets printed to screen

也许是晚上(或早),我在这里错过了一个明显的错误?

4 个答案:

答案 0 :(得分:3)

itertools.starmap返回一个迭代器;实际上让它执行你需要迭代它,例如使用list

list(itertools.starmap(func, [("fall", "2007")]))

答案 1 :(得分:1)

问题是你的starmap()函数调用返回迭代器(即itertools.starmap对象)的结果,而不是值本身的列表。

您的功能正常,但您应该通过迭代逐个获取结果:

for result in itertools.starmap(func, [("fall", "2007")]):
    # print result here or do some other stuff

要在开始时获取结果列表(如果您不需要延迟结果获取) - 使您的迭代器适应列表:

list(itertools.starmap(func, [("fall", "2007")]))

答案 2 :(得分:0)

要在开始时获得结果列表(如果您不需要获取懒惰的结果)-将迭代器调整为list(在Python3中):

>>> list(starmap(lambda x,y:x**y, [(1,2),(3,4)]))
[1, 81]

答案 3 :(得分:-1)

就个人而言,我只是避免使用星图。相反,我使用以下自制函数

def one_arg(f) :
    return lambda x : f(*x)

并将其应用于func。