如何处理 PyObject_GetItem() 函数中的 `key' 参数

How to handle the `key' argument in PyObject_GetItem() function

我正在用我自己的 c 库编写一个 python 模块,我需要知道如何处理 PyObject_GetItem() 函数,特别是 key 参数,文档不是非常有帮助,我看到了一个示例,其中的解决方案是

Py_hash_t hash;

hash = PyObject_Hash(key);

但问题是,我想知道 key 是字符串还是整数。

如果有办法区分字符串键和整数键,我可以使用 PyObject_Hash() 方法,因为我还可以使用 Python 哈希函数计算与字符串对应的哈希值,但我宁愿不这样做,因为我已经在列表上实现了二进制搜索,我试图通过 python.

中的下标访问它

我也试过了

PyArg_ParseTuple(key, "i", ...);

并为字符串检查哪个成功,但随后解释器抛出异常,因为 key 不是元组。

我刚刚找到了正确的方法,有一个 PyUnicode_Check() 宏接受一个 PyObject 参数和 returns 0 如果对象是不是 unicode 对象,所以它 returns 0 对于 int 键,对于字符串键非零。

这正是我所需要的,因为现在我可以继续提取文本并在我的列表中执行二进制搜索。

此外,还有一个 PyObject_TypeCheck() 函数,它 returns 对象的类型,在这种情况下也非常有用。