Aquí es cómo lo haría (todo el código no probado):
Paso 1: Necesita crear los algoritmos. El conjunto de datos podría tener este aspecto:
class Dataset(object):
def __init__(self, dataset):
self.dataset = dataset
def __iter__(self):
for x in self.dataset:
yield x
Tenga en cuenta que usted hace un iterador fuera de él, por lo que iterar sobre ella un elemento a la vez. Hay una razón para eso, se verá más adelante:
Otro algoritmo podría tener este aspecto:
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
Paso entonces necesitaría 2
Su usuario para hacer una cadena de esto de alguna manera. Ahora bien, si él tenía acceso a Python directamente, puede simplemente hacer esto:
dataset = Dataset(range(100))
multiplier = Multiplier(dataset, 5)
y luego obtener los resultados por:
for x in multiplier:
print x
y sería pedir al multiplicador para una pieza de datos a la vez , y el multiplicador a su vez como el conjunto de datos. Si tiene una cadena, esto significa que se maneja una pieza de datos a la vez. Esto significa que puede manejar grandes cantidades de datos sin usar mucha memoria.
Paso 3
Probablemente desea especificar los pasos de alguna otra manera. Por ejemplo, un archivo de texto o una cadena (parece que esto puede estar basado en la web?). Entonces necesitas un registro sobre los algoritmos. La manera más fácil es simplemente crear un módulo llamado "registry.py" como este:
algorithms = {}
Fácil, ¿eh? Se podría registrar un nuevo algoritmo de este modo:
from registry import algorithms
algorithms['dataset'] = Dataset
algorithms['multiplier'] = Multiplier
También había necesidad de un método que crea la cadena de especificaciones en un archivo de texto o algo así. Te dejaré eso a ti. ;)
(Probablemente usaría la arquitectura Zope Component y haría los componentes de los algoritmos y los registraría en el registro de componentes. Pero eso es, en sentido estricto, excesivo).
Excelente y elegante. –
Perdón por ser ese novato, pero no pude hacer que el código funcione. ¿Devolveré nombres de algoritmo de la función algo_by_name? –
algo_by_name (aname) debe ser una función, por lo que puede pasarle (p, data). Escribí un ejemplo. – Tobu