Scikit-learn经常使用joblib
与Parallel(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__
可以使用这种语法吗?
这个语法到底是做什么的?
“特殊功能”可能只是一个__call__
method。可以像调用函数一样调用具有该方法的类的实例。在这种情况下,Parallel可能会定义__call__
来接受生成器。
(注意,这并不是说编写像你的例子这样的代码是一个好主意。这是不必要的混淆。)