这个joblib是什么并行语法呢?这么多括号

时间:2017-12-21 17:19:25

标签: python parallel-processing scikit-learn joblib

Scikit-learn经常使用joblibParallel(n_jobs=n_jobs)(delayed(function)(param_to_function) for param_to_function in iterable)等调用并行化。

This helpful question and answer表示这个双括号业务意味着第二个集合被传递给涉及第一个集合的调用返回的任何内容,如果返回的东西是可调用的,那么这很有意义。

但是Parallel(n_jobs=n_jobs)返回的内容应该是Parallel对象,对吧?然后我们将第二个括号中的循环给出的generator对象传递给它。你不应该在建造之后直接将发电机传递给一个类。对象和输入之间应该有一些函数调用。或者在python中有__some_special_function__可以使用这种语法吗?

这句话到底是做什么的?

1 个答案:

答案 0 :(得分:2)

“特殊功能”可能只是__call__ method。可以像调用函数一样调用具有该方法的类的实例。在这种情况下,Parallel可能会定义__call__来接受生成器。

(注意,这并不是说编写像你的例子这样的代码是一个好主意。这是不必要的混淆。)