有没有办法将列表项与参数一起映射到函数?
我有一个清单:
pages = [p1, p2, p3, p4, p5...]
我必须调用myFunc
与每个列表元素对应的函数以及其他参数,以便可以计算以下内容
myFunc(p1, additionalArgument)
myFunc(p2, additionalArgument)
等等...
有什么优雅的方法可以做到这一点吗?
有没有办法将列表项与参数一起映射到函数?
我有一个清单:
pages = [p1, p2, p3, p4, p5...]
我必须调用myFunc
与每个列表元素对应的函数以及其他参数,以便可以计算以下内容
myFunc(p1, additionalArgument)
myFunc(p2, additionalArgument)
等等...
有什么优雅的方法可以做到这一点吗?
您还可以使用 lambda 函数:
map(lambda p: myFunc(p, additionalArgument), pages)
使用列表推导:
result = [myFunc(p, additionalArgument) for p in pages]
您可以使用列表理解
[myFunc(p, additionalArgument) for p in pages]
或者functools.partial()
map(functools.partial(myFunc, some_arg=additionalArgument), pages)
请注意,如果您打算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()
,除了 iterable 的元素应该是作为参数解包的 iterables。
IE
pool.starmap(myFunc, args) # tuples are unpacked and two arguments are passed to myFunc