1

有一个函数,func它需要两个字符串参数,第一个有效,但根据 itertools 文档,第二个不应该也有效吗?该函数当前打印一个随机字符串,作为回报,但第二次没有打印任何内容

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

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

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

4

4 回答 4

3

itertools.starmap返回一个迭代器;要真正让它执行,您需要遍历它,例如使用list

list(itertools.starmap(func, [("fall", "2007")]))
于 2012-08-14T11:55:08.190 回答
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")]))
于 2012-08-14T11:56:46.747 回答
0

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

>>> list(starmap(lambda x,y:x**y, [(1,2),(3,4)]))
[1, 81]
于 2018-07-11T01:19:20.550 回答
-1

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

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

并将其应用于func。

于 2015-05-09T18:38:32.490 回答