2017-08-27 30 views
-2

我不明白此代碼中(* p)的用途。試圖通過枚舉了解ThreadPool.map

任何人都可以請幫忙嗎?
我對此很陌生。

from multiprocessing.pool import ThreadPool 

pool=ThreadPool() 
def mul(x,y): 
    print x*y 

out=[4,5,6] 
pool.map(lambda p: (lambda i, prediction: 
      mul(prediction, i))(*p), 
      enumerate(out)) 
+0

我還可以前往了對文檔的ThreadPool.map –

+0

沒有什麼我不理解是這個代碼的流程 –

+0

拉姆達內部labmda是如何工作的 –

回答

0

從第一個lambda開始,它返回一個包含兩個值的元組。因此在第二個lambda中,p包含返回的元組。

要從這兩個變量中得到每一個,你必須解開它們,這正是星號所做的。

它這樣做是:

i, prediction = p 

這這裏需要爲multiprocessing.pool.map只需要在函數調用的一個參數。

+0

@Omerjaved很高興它有幫助。考慮接受答案關閉主題:)再次歡迎並考慮閱讀所有資源:[旅遊],[問] – Y0da

0

如果改寫爲單線程應用程序,你會得到這樣的事情

for i, prediction in enumerate(out): 
    mul(prediction, i) 

map()功能將應用功能,p一個集合。在「圖示符」是拆包枚舉在每個線程

我認爲,內部拉姆達可以寫,例如

def foo(*args): 
    mul(args(0), args(1)) 

foo(enumerate(out)) 
+0

謝謝Cricket007現在我明白了,想要upvote,但不能 –