On Fri, Sep 28, 2012 at 8:17 AM, Peter Otten <__pete...@web.de> wrote: > > def make_key(keys): > @total_ordering > class Key(object): > def __init__(self, value): > self._keys = keys(value) > self._cached = []
Using a generator/iterator to pump the key values into a cache is a great idea. But I think it would generally be nicer to let "keys" be a sequence of functions. Then define the generator in make_key() before you define the class: def make_key(keys): def _keys(value): for key in keys: yield key(value) @total_ordering class Key(object): def __init__(self, value): self._keys = _keys(value) self._cached = [] Also, as far as I can see in the code, implementing "total_ordering" is unnecessary for sorting. One only needs to implement __lt__. It's used by binarysort() to test the pivot via the IFLT/ISLT macros: http://hg.python.org/cpython/file/70274d53c1dd/Objects/listobject.c#l1023 > def __lt__(self, other): > for a, b in izip(self.keys(), other.keys()): > if a == b: > pass > else: > return a < b > return False Or test for "!=": def __lt__(self, other): for a, b in izip(self.keys(), other.keys()): if a != b: return a < b return False _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor