擅长:python、mysql、java
<p>您可以扩展<code>list</code>类本身,并在需要元素时延迟地应用转换。这里有一个简短的实现-它不允许对转换进行索引操作,但是您可以在堆栈中应用任何映射转换。在</p>
<pre><code>class ListTransform(list):
def __init__(self, *args):
list.__init__(self, *args)
self.transforms = []
def __getitem__(self, index):
return reduce(lambda item, t: t(item), self.transforms, list.__getitem__(self, index))
def __iter__(self):
for index in xrange(len(self)):
yield self[index]
def __repr__(self):
return "'[%s]'" % ", ".join(repr(item) for item in self)
__str__ = lambda s: repr(s).strip("'")
</code></pre>
<p>你准备好了:</p>
^{pr2}$
<p>好吧-我可能对<strong>getitem</strong>方法中的“reduce”调用反应过度了-但这是有趣的部分。:-)
为了便于阅读,请随意改写:</p>
<pre><code>def __getitem__(self, index):
item = list.__getitem__(self, index)
for t in self.transforms:
item = t(item)
return item
</code></pre>
<p>如果您喜欢这个想法,您可以包含一个“filter”成员来为项创建筛选函数,并检查转换上的参数数量,以允许它们处理索引,甚至访问其他列表项。在</p>