python - Python C API:如何在不知道其类型的情况下将任何 Python 对象存储为 void*?
问题描述
我想知道是否可以将任何 Python 对象作为 void* 存储在 Python C API 中,稍后将按原样返回给 python。
我试图做这样的事情:
store_python_object(PyObject *self, PyObject *args)
{
int retval;
PyObject *self_capsule;
void *stored_object;
/* Parse input arguments */
retval = PyArg_ParseTuple(args,
"OO:store_python_object",
&self_capsule,
&stored_object);
if (!retval) {
return NULL;
}
// More code here...
// Return stored_object to python as-is
}
但是,例如,在存储 int 时,这似乎有一个奇怪的行为(同样,我想存储任何 Python 对象,而不仅仅是 int)。
解决方案
发现了我的问题:
我在 C 中存储了一个 python 对象,但没有增加它的引用计数器(使用Py_INCREF(PyObject *o)
)。显然,python 释放了导致奇怪行为的 python 对象。
谢谢大家。
推荐阅读
- fonts - Jasper Report 字体扩展无衬线字体名称
- android - 如何为任务添加片段范围的侦听器?
- excel - 我需要复制活动单元格旁边的 6 个单元格
- python - 我只想用这些方法得到更有效的答案
- openxml - 打开 Xml - 需要修复文件才能打开
- xml - XML 样式表解析字段获取第一个空格左侧的任何内容
- android - 连接并快速断开连接后,我的 BLE 模块对其他设备变得不可见,即使我停止了应用程序
- r - 在函数中设置子集时如何指定列?
- python - Why node.js prints the PythonShell variable?
- python - 使用 Python 生成词频图的方法?