gpt4 book ai didi

Python C 扩展 - 接收字典作为参数

转载 作者:太空狗 更新时间:2023-10-30 01:59:37 26 4
gpt4 key购买 nike

我正在编写一个 C 扩展,但我完全不知道如何接收一个 dict 作为参数。由于文档没有关于如何实现这一点的任何细节,我尝试将参数解析为 Python 对象,然后将其作为字典进行操作:

PyTypeObject *dict;

if(!PyArg_ParseTuple(args, "o", &dict))
return NULL;

但是代码解析失败:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import plotting
>>> plotting.plot({'wff':0})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be impossible<bad format char>, not dict

据我从错误消息中了解到,格式 char 是错误的(我认为“o”应该代表任何 Python 对象)。

将 Python 字典解析为 C 指针的最佳方法是什么?我正在仔细阅读文档,但没有找到与此类似的内容。

谢谢。

最佳答案

这里有几个问题。首先,PyTypeObject 类型专门用于定义类型的结构。您可以在此处阅读有关类型对象的更多信息:http://docs.python.org/2/c-api/typeobj.html这不是你想要的。对于指向任意 Python 对象的指针,您要使用 PyObject*

其次,任意 Python 对象的类型代码是 “O”(大写)而不是 “o”。如果你想做一个类型检查它是一个字典,你也可以使用 "O!" 这需要你传递一个类型对象的地址,然后是 PyObject* 的地址 您要将返回的 PyObject* 存储到其中。例如:

PyObject* dict;
PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict);

这会将对象返回到 *dict 指针中,如果它不是字典,则引发 TypeError。但是,除非你绝对需要它是一个 dict,否则我建议不要这样做,以支持检查对象是否实现映射接口(interface)。但这是一个不同的问题。

关于Python C 扩展 - 接收字典作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13276145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com