On 11/22/2012 02:50 PM, eryksun wrote: > On Thu, Nov 22, 2012 at 10:49 AM, Dave Angel <d...@davea.name> wrote: >> >>> <snip> >>> >> >> This one first gets into trouble if x is even and y is odd, because if >> tries to compare y with None, which is basically an undefined ordered >> comparison (and illegal in Python3, I believe). The flag value needs to >> be an int, or at least numeric. > > Yes, comparing an int to None raises a TypeError in Python 3, but it > is 'defined' in 2.x, for what it's worth. Since > > NoneType lacks tp_richcompare (__lt__, __gt__, etc) > NoneType lacks tp_compare (__cmp__) > int/long lack tp_richcompare for a swapped operation > int/long tp_compare isn't _PyObject_SlotCompare > None can't be coerced (__coerce__) to an int/long > > the comparison falls through to default_3way_compare, where it's hard coded: > > /* None is smaller than anything */ > if (v == Py_None) > return -1; > if (w == Py_None) > return 1; > > http://hg.python.org/cpython/file/70274d53c1dd/Objects/object.c#l750 >
You're looking at a particular implementation of CPython code, while I'm looking at Python's docs. In tha language version 2.x, the result is repeatable, but undefined, deliberately. ++ http://docs.python.org/2/reference/expressions.html ++ Otherwise, objects of different types always compare unequal, and ++ are ordered consistently but arbitrarily. In other words 2 > None will give the same answer each time, for a single run of a script in CPython, but it is unspecified what that answer will be, and may vary by version as well as implementation. -- DaveA _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor