如何将元组从Python 3.6传递到C
How to pass a tuple from Python 3.6 to C++
带有完整嵌入式Python
和C++
的小问题。问题是我有一个Python
代码,该代码将返回元组,也就是在这种情况下,语句是:
def test():
x = 1;
y=2;
c=3;
d=4;
return [x,y,c,d]
在C++
中,我以以下方式嵌入了代码:
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL)
{
printf("Result of call: %dn", PyTuple_GetItem(pArgs, i, pValue));
}
由于某种原因,打印输出就是这样:
呼叫的结果:1846660304
也尝试返回一个字符串,这也不起作用。只有一个工作的一个是返回,例如返回h和in C++
而不是使用 PyTuple_GetItem
,而是使用 PyLong_AsLong()
。
有人可以将我指向正确的方向,如何读取他返回C++
,我对Python
的新手很新,不幸的是,Python
文档至少在这种情况下至少在没有代码示例的情况下处于较差的水平任何。
您有四个问题:
- 您的功能正在返回
list
,而不是tuple
。使用PyTuple_GetItem
是不合适的;和 -
PyTuple_GetItem
不需要三个参数,只需两个。和 - 由于您无法确定任何情况下的返回类型,因此最好使用
PyObject_GetItem
;和 - 最重要的是,您正在寻找错误的对象。
也就是说,您正在使用PyTuple_GetItem(pArgs, i, pValue)
,它将尝试在pArgs
中查看。您大概可以访问pValue
:
PyObject_GetItem(pValue, i)
一个元组被(1,2,3,4)包围,而不是支架。尝试在PY代码中更改元组,然后重新运行您的代码。
相关文章:
- C++:TypeDef使用元组
- Pybind11:将元组列表从Python传递到C++
- 重载元组索引运算符-C++
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将fold表达式与std::一起用于两个元组
- std::ranges::elements_view,用于自定义类似元组的数据
- 将元组的向量转换/构造为堆
- 专用于 std 元组的模板,而无需用户执行remove_cvref
- 将元组的向量构造成堆
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 在Windows元组上构建64位Python扩展:未声明的标识符
- Boost::P ython,将元组转换为Python有效,矢量<tuple>不
- 从c++向python返回复杂列表的元组
- 如何将元组从Python 3.6传递到C
- 返回 vector<pair<int,int>> & from c++ 方法到 python 使用 swig typemap 的元组列表
- 关于 Python 元组的不变性
- Python swig包装的向量的向量的双显示为元组
- 将 Python 转换为 C++:列表和元组