如何从C的PyObject类型的函数中将值从C返回到python?

时间:2015-12-17 08:35:46

标签: python c python-c-api python-c-extension python-extensions

我试图通过从python调用C文件来传递一个值,然后再将该值从C返回到python。

我的问题是如何做到这一点?是否可以使用return Py_BuildValue(a+b)类似的东西?

#include <Python.h>

static PyObject *
hello_world(PyObject *self, PyObject *noargs)
{
   int a=5,b=10;

   return Py_BuildValue(a+b); //This is Errorus.
}


static PyMethodDef
module_functions[] = {
    { "hello_world", hello_world, METH_NOARGS, "hello world method" },
    { NULL }
};



PyMODINIT_FUNC
inittesty2(void)
{
    Py_InitModule("testy2", module_functions);
}

2 个答案:

答案 0 :(得分:4)

指定值的格式:

return Py_BuildValue("i", a+b); // "i" for int

您可以找到更多格式单元here (Py_BuildValue documentation)

答案 1 :(得分:1)

您可以使用显式构造函数来表示整数PyInt_FromLongPyLong_FromLong

对于您可以使用Py_BuildValue创建的任何类型,您都可以找到这样的函数,并获得一点安全性。