python 3.范围排序和不等式比较



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

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

Python 3的range对象定义了以下丰富的比较(取自C源代码):

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,它们是不相等和相等的。其他比较,如bigger -equals、bigger -than等,都是Py_RETURN_NOTIMPLEMENTED,所以当它们在"技术上"实现时(就像在内置对象中定义比较方法一样),它们会抛出一个NotImplementedError。

相关内容

  • 没有找到相关文章

最新更新