将多个参数传递给current.futures.Executor.map?

发布于 2021-01-29 17:55:42

concurrent.futures.Executor.map采用可变数目从该给出的函数被调用iterables的。
如果我有一个生成元组的生成器,这些元组通常在原位打开,该如何命名?

以下代码不起作用,因为每个生成的元组均作为map的不同参数给出:

args = ((a, b) for (a, b) in c)
for result in executor.map(f, *args):
    pass

没有生成器,要映射的所需参数可能如下所示:

executor.map(
    f,
    (i[0] for i in args),
    (i[1] for i in args),
    ...,
    (i[N] for i in args),
)
关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您需要删除*map电话:

    args = ((a, b) for b in c)
    for result in executor.map(f, args):
        pass
    

    这将调用flen(args)时间,f应在何处接受一个参数。

    在Linux上 ,如果要f接受两个参数,则可以使用lambda调用,例如:

    args = ((a, b) for b in c)
    for result in executor.map(lambda p: f(*p), args):   # (*p) does the unpacking part
        pass
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看