Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何处理`键';PyObject_GetItem()函数中的参数_Python_C_Python C Extension - Fatal编程技术网

Python 如何处理`键';PyObject_GetItem()函数中的参数

Python 如何处理`键';PyObject_GetItem()函数中的参数,python,c,python-c-extension,Python,C,Python C Extension,我正在从自己的c库中编写一个python模块,我需要知道如何处理函数,特别是key参数,文档不是很有用,我已经看到了一个示例,其中说明了解决方案 Py_hash_t hash; hash = PyObject_Hash(key); 但问题是,我想知道key是字符串还是整数 如果有办法区分字符串键和整数键,我可以使用PyObject\u Hash()methdod,因为我还可以使用Python Hash函数计算对应于字符串的哈希值,但我不想这样做,因为我已经在列表上实现了一个二进制搜索,我正试

我正在从自己的c库中编写一个
python
模块,我需要知道如何处理函数,特别是
key
参数,文档不是很有用,我已经看到了一个示例,其中说明了解决方案

Py_hash_t hash;

hash = PyObject_Hash(key);
但问题是,我想知道
key
是字符串还是整数

如果有办法区分字符串键和整数键,我可以使用
PyObject\u Hash()
methdod,因为我还可以使用Python Hash函数计算对应于字符串的哈希值,但我不想这样做,因为我已经在列表上实现了一个二进制搜索,我正试图通过在python中订阅来访问它

我也试过了

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

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

我刚刚找到了正确的方法,有一个宏,它接受单个
PyObject
参数,如果对象不是
unicode
对象,则返回
0
,因此,它为
int
键返回
0
,为字符串键返回非零

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


此外,还有一个返回对象类型的函数,在这种情况下也非常有用。

为什么需要知道类型?如果两者都不是呢?@IgnacioVazquez Abrams因为我想提供两种方法来获取元素,一种是通过索引,另一种是通过元素名称,每种方法都有一个名称关联,使用它来访问元素非常重要。在Python中,您将如何做?寻找适合您使用的Python工具的C-api等价物。@user2357112我不知道,因为我的Python知识有限。这就是为什么我要问这个问题,这也是为什么最初我没有在问题中添加标签。