我不明白这段代码中(* p)的目的。
有人可以帮忙吗? 我是新来的。
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 :(得分:0)
从第一个lambda开始,它返回一个包含两个值的元组。因此,在第二个lambda中,{
"_index": "movies",
"_type": "movie",
"_id": "AV4jhLAYQqa7xxY9fFkM",
"_score": 1,
"_source":{"movieName":"The War"}
},
{
"_index": "movies",
"_type": "movie",
"_id": "AV4jjQPbfc86ZOjMT9mQ",
"_score": 1,
"_source":{"movieName":"The War"}
},
包含返回的元组。
要获得这两个变量中的每一个,你必须解压缩它们,这正是星号所做的。
这样做:
p
这是必需的,因为i, prediction = p
只为函数调用接受一个参数。
答案 1 :(得分:0)
如果重写为单线程应用程序,你会得到类似这样的东西
for i, prediction in enumerate(out):
mul(prediction, i)
map()
函数将在集合上应用函数p
。 “splat运算符”正在解压缩每个线程的枚举
我认为可以编写内部lambda,例如
def foo(*args):
mul(args(0), args(1))
foo(enumerate(out))