Hier Wie würde ich das machen (alle Codes nicht getestet):
Schritt 1: Sie müssen die Algorithmen erstellen. Der Datensatz könnte wie folgt aussehen:
class Dataset(object):
def __init__(self, dataset):
self.dataset = dataset
def __iter__(self):
for x in self.dataset:
yield x
Beachten Sie, dass Sie einen Iterator daraus zu machen, so dass Sie iterieren es ein Element zu einem Zeitpunkt. Es gibt einen Grund dafür, werden Sie später sehen:
Ein anderer Algorithmus könnte wie folgt aussehen:
class Multiplier(object):
def __init__(self, previous, multiplier):
self.previous = previous
self.multiplier = multiplier
def __iter__(self):
for x in previous:
yield x * self.multiplier
Schritt 2
Ihre Benutzer würde dann irgendwie eine Kette daraus machen müssen. Nun, wenn er direkt Zugriff auf Python hat, können Sie einfach tun:
dataset = Dataset(range(100))
multiplier = Multiplier(dataset, 5)
und dann die Ergebnisse durch:
for x in multiplier:
print x
Und es würde den Multiplikator für ein Stück von Daten zu einer Zeit fragen und der Multiplikator würde wiederum als Datensatz verwendet. Wenn Sie eine Kette haben, bedeutet dies, dass ein Teil der Daten gleichzeitig bearbeitet wird. Dies bedeutet, dass Sie große Datenmengen verarbeiten können, ohne viel Arbeitsspeicher zu benötigen.
Schritt 3
Wahrscheinlich wollen Sie die Schritte in einer anderen Art und Weise spezifizieren. Zum Beispiel eine Textdatei oder eine Zeichenkette (klingt wie diese kann webbasiert sein?). Dann brauchen Sie eine Registrierung über die Algorithmen. Der einfachste Weg ist, ein Modul namens "registry.py" wie folgt zu erstellen:
algorithms = {}
Einfach, was? Sie würden einen neuen Algorithmus wie so registrieren:
from registry import algorithms
algorithms['dataset'] = Dataset
algorithms['multiplier'] = Multiplier
Sie auch ein Verfahren bräuchten, die die Kette von den Spezifikationen in einer Textdatei oder etwas schafft. Das überlasse ich dir. ;)
(Ich würde wahrscheinlich die Zope Component Architecture verwenden und Algorithmenkomponenten erstellen und sie in der Komponentenregistrierung registrieren. Aber das ist alles streng genommen Overkill).
Ausgezeichnet und elegant. –
Tut mir leid, dass ich der Neuling bin, aber ich konnte den Code nicht funktionieren lassen. Werde ich Algorithmusnamen von algo_by_name Funktion zurückgeben? –
algo_by_name (aname) muss eine Funktion sein, damit Sie (p, data) daran übergeben können. Ich habe ein Beispiel geschrieben. – Tobu