2012-08-14 86 views
1

有一個函數,func需要兩個字符串參數,第一個工作,但根據itertools文檔,不應該第二個工作嗎?該功能目前打印一個隨機字符串,作爲回報,但在第二個沒有獲取印刷Python 2.7 Itertools Starmap

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

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

也許是在晚上太晚了(或早期),我失去了一個明顯的錯誤嗎?

回答

3

itertools.starmap返回迭代;真正得到它來執行,你需要通過它例如迭代使用list

list(itertools.starmap(func, [("fall", "2007")])) 
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")])) 
+0

星圖懶惰地執行,所以將應用傳遞的值來傳遞函數(進行呼叫)時的.next()內方法被調用(每個的.next()方法調用)。列表(..)將遍歷這些電話,並創造業績爲你的列表。 for循環還調用的.next()方法隱含在每個迭代。 – 2012-08-14 12:05:19

0

就個人而言,我只是避免了starmap。相反,我使用以下homebrewed函數

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

並將其應用於func。