Python比较C API中的对象

时间:2015-03-20 20:28:25

标签: python c python-c-api

鉴于两个PyObject*,如何在C API中对它们进行比较?

我最初想到的是a == b,但它显然不正确,因为它会比较指针而不是对象。我在Python C API中寻找a == b(不是a is b)Python等价物。

1 个答案:

答案 0 :(得分:4)

您正在寻找PyObject_RichCompare功能:

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

来自documentation

  

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

     

返回值:新参考。

     

使用o1指定的操作({1}},o2,{{1} },opidPy_LT或   Py_LE,分别对应Py_EQPy_NEPy_GTPy_GE<<=。这是   相当于Python表达式==,其中!=是   运算符对应>。返回比较的值   成功,或>=失败。

您可能也对PyObject_RichCompareBool function感兴趣,{{3}}与o1 op o2相同但返回整数而不是op。具体来说,opid返回true,NULL返回false,PyObject_RichCompare返回错误。