范围排序和不等式比较

Range ordering and inequality comparison

我试图重新创建 Python 的 range 作为学习练习,并注意到范围具有 range.__gt__range.__ge__ 等属性。它是在range中专门定义的,因为range也有8个属性,限定名称为object.__...__.

我想知道范围比较的用途。任何 range(*x) <= range(*y) 的尝试都会引发 TypeError: unorderable types: range() > range()

Python 3 范围对象定义了以下丰富的比较(取自 C source):

static PyObject *
range_richcompare(PyObject *self, PyObject *other, int op)
{
    int result;
    if (!PyRange_Check(other))
        Py_RETURN_NOTIMPLEMENTED;
    switch (op) {
    case Py_NE:
    case Py_EQ:
        result = range_equals((rangeobject*)self, (rangeobject*)other);
        if (result == -1)
            return NULL;
        if (op == Py_NE)
            result = !result;
        if (result)
            Py_RETURN_TRUE;
        else
            Py_RETURN_FALSE;
    case Py_LE:
    case Py_GE:
    case Py_LT:
    case Py_GT:
        Py_RETURN_NOTIMPLEMENTED;
    default:
        PyErr_BadArgument();
        return NULL;
    }
}

如您所见,实际实现的唯一比较是 NEEQ,它们用于不平等和平等。其他比较,如大于等于、大于等,都是 Py_RETURN_NOTIMPLEMENTED,因此虽然它们是“技术上”实现的(因为在内置对象中定义了比较方法),但它们会抛出 NotImplementedError。