59

有没有办法将列表项与参数一起映射到函数?

我有一个清单:

pages = [p1, p2, p3, p4, p5...]

我必须调用myFunc与每个列表元素对应的函数以及其他参数,以便可以计算以下内容

myFunc(p1, additionalArgument)
myFunc(p2, additionalArgument)

等等...

有什么优雅的方法可以做到这一点吗?

4

4 回答 4

114

您还可以使用 lambda 函数:

map(lambda p: myFunc(p, additionalArgument), pages)
于 2015-08-13T18:17:30.443 回答
76

使用列表推导:

result = [myFunc(p, additionalArgument) for p in pages]
于 2012-04-18T15:16:19.577 回答
48

您可以使用列表理解

[myFunc(p, additionalArgument) for p in pages]

或者functools.partial()

map(functools.partial(myFunc, some_arg=additionalArgument), pages)
于 2012-04-18T15:16:34.413 回答
3

请注意,如果您打算map用于分布式计算(即使用multiprocessing),它不会像预期的那样解包参数。假设您想将调用分配给myFunc(接受两个参数:pageadditionalArgument):

pages = [p1, p2, p3, p4, p5...]

如果您指定args(元组)列表,即

args = [(page, additionalArgument) for page in pages]

map 不会解包args元组,只会将一个参数(元组)传递给myFunc

pool.map(myFunc, args)  # map does not unpack the tuple

需要改用multiprocessing.starmap

starmap就像map(),除了 iterable 的元素应该是作为参数解包的 iterables。

IE

pool.starmap(myFunc, args)  # tuples are unpacked and two arguments are passed to myFunc
于 2019-12-02T14:29:36.223 回答