How do you pass a standard operator such as '<' as a parameter?
peterm at resmed.com.au
Thu Nov 20 22:22:15 CET 2003
Wrote too soon - the obvious answer is not to use a "comparison" function at
all when instantiating the class but rather to just code the "<" in the
class "add" procedure and then make sure the data type that is being used
contains a __lt__ operator :-) i.e. the class definition should just be:
class OrderedList (list):
def add (self, element):
"""Add the element into the list in the correct ordered sequence
the data type.
# Locate the position in the list and perform the insertion
for i in list(self):
if element < i:
list.insert(self, list.index(self, i), element)
# element is greater than any current value in the list, so
# it at the end.
This will work for integers as well as user defined data types that have a
__lt__ function defined.
"Peter Milliken" <peterm at resmed.com.au> wrote in message
news:z7avb.541$WD1.13194 at nnrp1.ozemail.com.au...
> I am creating a subclass of list that will allow 'ordered' lists via the
> addition of a new method ('add' for want of a better name :-)). Since I
> to make it as generic as possible, I want to pass the comparator function
> an argument at initialisation. It would be used line this:
> y = OrderedList(, LessThanFunction)
> So the class definition would look like this:
> class OrderedList (list):
> def __init__ (self, comparator):
> self.ComparisonFunction = comparator
> def add (self, element):
> """Add the element into the list in the correct ordered
> the data type.
> # Locate the position in the list and perform the insertion
> for i in list(self):
> if self.ComparisonFunction(element, i):
> list.insert(self, list.index(self, i), element)
> # element is greater than any current value in the list, so
> # it at the end.
> list.append(self, element)
> For non-standard data types, you would obviously define a '<' function and
> then pass it as a parameter at initialisation, but how can you pass one of
> the standard operators? i.e. '<'.
> For instance, to create an ordered list of integers, I would like to
> instantiate new objects using something like this:
> y = OrderedList(, <)
> However, this results in a syntax error. Is there anyway to pass the '<'
> operator itself? I fully realise that you could create a "lessthan"
> function, either explicitly or as a lamdba, but my curiousity bump is
> itching and I would like to know how to pass one of the standard
More information about the Python-list