2

学習演習としてPython を再作成しようとしていたところ、範囲に, etc. 属性rangeがあることに気付きました。範囲には修飾名.range.__gt__range.__ge__object.__...__

範囲比較は何に使われるのだろうと思っていました。range(*x) <= range(*y)レイズしようとすると、TypeError: unorderable types: range() > range()

4

1 に答える 1

1

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;
    }
}

ご覧のとおり、実際に実装されている比較は、不等号と等号を比較する と のみNEですEQ。large-equals、large -than などのその他の比較はすべてPy_RETURN_NOTIMPLEMENTED.

于 2015-05-19T21:12:33.897 に答える