2015-03-20 4 views
1

Учитывая два PyObject* s, как я могу их сравнить в C API?Python сравнить объекты в C API

Сначала я подумал о a == b, но это явно неверно, поскольку он будет сравнивать указатель, а не объект. Я ищу a == b (не a is b) эквивалент Python в API Python C.

ответ

4

Вы ищете функции PyObject_RichCompare:

PyObject *result = PyObject_RichCompare(a, b, Py_EQ); 

От documentation:

PyObject* PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)

Возвращаемое значение: Новая ссылка.

Сравните значения o1 и o2 используя операцию, заданную opid, который должен быть одним из Py_LT, Py_LE, Py_EQ, Py_NE, Py_GT или Py_GE, что соответствует <, <=, ==, !=, >, или >= соответственно. Это эквивалент выражения Python o1 op o2, где op - оператор , соответствующий opid. Возвращает значение сравнения по результату или NULL при сбое.

Вы также можете быть заинтересованы в PyObject_RichCompareBool function, который делает то же самое, как PyObject_RichCompare но возвращает целое число, а не PyObject *. В частности, возвращается значение 1, значение 0 для false, и -1.

+0

Что касается сравнения, то или нет. – marsh