[Python-Dev] cmp(x,x)

Gustavo Niemeyer niemeyer at conectiva.com
Tue May 25 11:30:20 EDT 2004


> [Greg Ewing]
> >> What if the list contains a NaN?
> 
> [Armin Rigo]
> > Uh, right.  The whole issue with NaNs is muddy.  Let's focus on Numeric as
> > a much saner example of why you need 'a==a' to return something else than
> > True.
> 
> Yes.  Please <wink>.

I belive that either my question was misinterpreted, or I'm
missing something.

I'm not suggesting to limit 'a==a' to return True/False only. I'm
suggesting to introduce a shortcut in the *list* comparison (more
specifically, in list_richcompare), since this is what is
currently being done, but with a more expensive logic.

Going through the function, in a case where v is w and op is
either Py_EQ or Py_NE, we have

1) Both objects are lists, go on.
2) Both objects have the same size, go on.
3) Searching for the first index where items are different, using
   PyObject_RichCompareBool(), won't find anything. Go on.
4) No more items to compare. Check sizes.
5) Sizes match. Check comparison operator.
6) Return either Py_True or Py_False.

This whole logic might be replaced by simply:

    if (v == w && (op == Py_EQ || op == Py_NE)) {
        res = (op == Py_EQ ? Py_True : Py_False);
        Py_INCREF(res);
        return res;
    }

-- 
Gustavo Niemeyer
http://niemeyer.net



More information about the Python-Dev mailing list