用于使用参数运行的Python映射列表项

时间:2012-04-18 15:15:03

标签: python

有没有办法将列表项与参数一起映射到函数。 我有一个清单:

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

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

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

依旧......

这样做有什么优雅的方法吗?我是新手所以请不要介意。

4 个答案:

答案 0 :(得分:49)

您还可以使用lambda函数:

map(lambda p: myFunc(p, additionalArgument), pages)

答案 1 :(得分:39)

使用列表理解:

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

答案 2 :(得分:34)

您可以使用列表理解

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

functools.partial()

map(functools.partial(myFunc, some_arg=additionalArgument), pages)

答案 3 :(得分:0)

请注意,如果您打算使用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

  

starmapmap()相似,只是可迭代项的元素应是作为参数解压缩的可迭代项。

pool.starmap(myFunc, args)  # tuples are unpacked and two arguments are passed to myFunc