如何将元组从Python 3.6传递到C

How to pass a tuple from Python 3.6 to C++

本文关键字:Python 元组      更新时间:2023-10-16

带有完整嵌入式PythonC++的小问题。问题是我有一个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代码中更改元组,然后重新运行您的代码。