Python是否有内置apply函数?多进程Pool.map执行函数列表存优化需求
Python中是否有替代原Python 2内置apply函数的工具?
嘿,刚好能解答你的问题!Python 3确实把内置的apply()函数给移除了,但你想要的这种“直接调用传入的无参函数”的需求,其实有更规范的替代方案。
你提到用multiprocessing.Pool.map批量执行函数时,写lambda f: f()总觉得有点繁琐?那你可以试试Python 3.10及以上版本里operator模块提供的operator.call——它的作用就是接收一个函数并直接调用它,完全等价于你写的那个lambda表达式,而且名字更直观。
用它改写你的代码会清爽很多:
from multiprocessing import Pool import operator def my_fun1(): return 1 def my_fun2(): return 2 def my_fun3(): return 3 with Pool(3) as p: one, two, three = p.map(operator.call, [my_fun1, my_fun2, my_fun3])
如果你的Python版本还没到3.10也没关系,完全可以自己在项目里封装一个简单的工具函数,比如:
def apply_func(f): return f()
之后直接用p.map(apply_func, ...)就行,命名清晰,团队里的同事一看就懂是什么意思。
另外顺便提一句:Python 2里的apply()其实还支持传递参数(比如apply(f, args, kwargs)),如果是带参函数的批量执行场景,Python 3里更推荐用functools.partial来绑定参数,再配合Pool.map使用,举个例子:
from functools import partial from multiprocessing import Pool def add(a, b): return a + b with Pool(2) as p: results = p.map(partial(add, b=2), [1, 3, 5]) # 最终results会是[3, 5, 7]
这样不管是无参还是带参的函数批量执行,都有规范又好读的写法啦。
内容的提问来源于stack exchange,提问作者javidcf
相关产品推荐
相关产品推荐

