我会这样做(所有代码未经测试):
第 1 步:您需要创建算法。数据集可能如下所示:
class Dataset(object):
def __init__(self, dataset):
self.dataset = dataset
def __iter__(self):
for x in self.dataset:
yield x
请注意,您从中创建了一个迭代器,因此您一次迭代一个项目。这是有原因的,稍后您会看到:
另一种算法可能如下所示:
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
第 2 步
然后,您的用户将需要以某种方式创建一个链。现在,如果他可以直接访问 Python,您可以这样做:
dataset = Dataset(range(100))
multiplier = Multiplier(dataset, 5)
然后通过以下方式获取结果:
for x in multiplier:
print x
它会一次向乘法器询问一条数据,而乘法器又会作为数据集。如果你有一个链,那么这意味着一次处理一个数据。这意味着您可以在不使用大量内存的情况下处理大量数据。
第 3 步
您可能想以其他方式指定步骤。例如文本文件或字符串(听起来可能是基于网络的?)。然后,您需要对算法进行注册表。最简单的方法是像这样创建一个名为“registry.py”的模块:
algorithms = {}
简单,嗯?您可以像这样注册一个新算法:
from registry import algorithms
algorithms['dataset'] = Dataset
algorithms['multiplier'] = Multiplier
您还需要一种从文本文件或其他文件中的规范创建链的方法。我会把它留给你。 ;)
(我可能会使用 Zope 组件架构并制作算法组件并将它们注册到组件注册表中。但严格来说,这都是矫枉过正)。