2017-12-21 7 views
0

Scikit-Learn oft verwendet joblib mit Aufrufen wie Parallel(n_jobs=n_jobs)(delayed(function)(param_to_function) for param_to_function in iterable) parallelisieren.Was ist diese Jobliste? Parallele Syntax? So viele Klammern

This helpful question and answer geben Sie an, dass dieses Geschäft mit doppelter Klammer bedeutet, dass die zweite Menge an das zurückgegeben wird, was von der ersten Gruppe zurückgegeben wird, was sehr sinnvoll ist, wenn die zurückgegebene Sache aufrufbar ist.

Aber hier die Sache von Parallel(n_jobs=n_jobs) zurückgegeben sollte ein Parallel Objekt, richtig sein? Und dann übergeben wir ihm ein generator Objekt, das durch die Schleife in der zweiten Klammer gegeben ist. Sie sollten nicht in der Lage sein, einen Generator nach einer solchen Konstruktion direkt an eine Klasse zu übergeben. Zwischen dem Objekt und der Eingabe sollte ein Funktionsaufruf stehen. Oder in Python gibt es __some_special_function__, die mit dieser Syntax funktioniert?

Was ist diese Syntax, genau zu tun?

Antwort

1

Die „Sonderfunktion“ ist wahrscheinlich nur ein __call__ method. Eine Instanz einer Klasse mit dieser Methode kann genau wie eine Funktion aufgerufen werden. In diesem Fall definiert Parallel vermutlich __call__, um einen Generator zu akzeptieren.

(Beachten Sie, das ist nicht zu sagen, es ist eine gute Idee, Code wie Ihr Beispiel zu schreiben. Es ist unnötig verwirrend.)