鉴于两个PyObject*
,如何在C API中对它们进行比较?
我最初想到的是a == b
,但它显然不正确,因为它会比较指针而不是对象。我在Python C API中寻找a == b
(不是a is b
)Python等价物。
答案 0 :(得分:4)
您正在寻找PyObject_RichCompare
功能:
PyObject *result = PyObject_RichCompare(a, b, Py_EQ);
PyObject* PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
返回值:新参考。
使用
o1
指定的操作({1}},o2
,{{1} },opid
,Py_LT
或Py_LE
,分别对应Py_EQ
,Py_NE
,Py_GT
,Py_GE
,<
或<=
。这是 相当于Python表达式==
,其中!=
是 运算符对应>
。返回比较的值 成功,或>=
失败。
您可能也对PyObject_RichCompareBool
function感兴趣,{{3}}与o1 op o2
相同但返回整数而不是op
。具体来说,opid
返回true,NULL
返回false,PyObject_RichCompare
返回错误。