【发布时间】:2018-06-03 17:13:26
【问题描述】:
我正在使用 Visual Studio 2015 C++ 项目和 Python 2.7 32 位构建 Python 扩展 (.pyd)。
这是我的.cpp 文件:
#include <Python.h>
static PyObject* GetTwoInts(PyObject* self, PyObject* args)
{
srand(time(NULL));
int random1 = rand() % 10;
int random2 = rand() % 10;
PyObject * python_val = Py_BuildValue("ii", random1, random2);
return python_val;
}
static PyObject* GetListTwoInts(PyObject* self, PyObject* args)
{
srand(time(NULL));
int random1 = rand() % 10;
int random2 = rand() % 10;
PyObject *val1 = PyInt_FromLong(random1);
PyObject *val2 = PyInt_FromLong(random2);
PyObject *result = PyList_New(2);
PyList_SetItem(result, 0, val1);
PyList_SetItem(result, 1, val2);
PyObject * python_val = Py_BuildValue("ii", result);
return python_val;
}
PyMODINIT_FUNC initUtils(void)
{
static PyMethodDef methods[] = {
{ "GetTwoInts", GetTwoInts, METH_NOARGS,
"Get two C ints as a Python tuple with two random numbers" },
{ "GetListTwoInts", GetListTwoInts, METH_NOARGS,
"Get a list with two random numbers" },
{ NULL, NULL, 0, NULL },
};
PyObject *m = Py_InitModule("Utils", methods);
}
这是使用已编译扩展的 Python 源代码:
import sys
import Utils
print help(Utils)
print Utils.GetTwoInts()
print Utils.GetListTwoInts()
这是输出:
(4, 2)
(91213912, 91213912)
所以,正如预期的那样,Py_BuildValue("ii", random1, random2); 给了我一个包含两个随机整数的正确元组。但是,在 GetListTwoInts 方法中返回一个列表会给我无效的数字(看起来像引用值还是指针?)。
我应该怎么做才能在GetListTwoInts 方法中返回一个实数值列表?
【问题讨论】:
-
你为什么不返回
result?这是你的清单。 -
@IgnacioVazquez-Abrams,谢谢。我只需要返回
result。
标签: python c++ cpython python-c-api python-extensions