有没有办法将列表项与参数一起映射到函数。 我有一个清单:
pages = [p1, p2, p3, p4, p5...]
我必须调用与每个列表元素对应的函数myFunc
以及其他参数,以便可以计算以下内容
myFunc(p1, additionalArgument)
myFunc(p2, additionalArgument)
依旧......
这样做有什么优雅的方法吗?我是新手所以请不要介意。
答案 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
(接受两个参数:page
和additionalArgument
),
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()
相似,只是可迭代项的元素应是作为参数解压缩的可迭代项。
即
pool.starmap(myFunc, args) # tuples are unpacked and two arguments are passed to myFunc