有一个函数func
,它带有两个字符串参数,第一个可以工作,但是根据itertools文档,第二个不应该工作吗?该函数当前打印一个随机字符串作为回报,但在第二个没有任何内容打印
func(*("dog", "cat")) //works
itertools.starmap(func, [("dog", "cat")]) //fails without error message, nothing gets printed to screen
也许是晚上(或早),我在这里错过了一个明显的错误?
答案 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。