【发布时间】:2021-12-21 20:50:33
【问题描述】:
我正在尝试开发一个 C 模块,用于将选择排序算法应用于数据列表并将排序后的列表作为 Python 列表格式返回给 Python 程序。
但是,我发现下面程序的结果会是这样的
[431863472]
#include <Python.h>
int sorting(int n[])
{
for (int i=0; i < sizeof(n)-1; i++){
int minpos = i;
for (int j=0; j < sizeof(n)-1; j++){
if (n[j] < n[minpos]){
minpos = j;
}
int temp = n[i];
n[i] = n[minpos];
n[minpos] = temp;
}
}
return n;
}
static PyObject* selectSort(PyObject* self, PyObject* args)
{
// instantiate our `n` value
int n[20000];
// if our `n` value
if(!PyArg_ParseTuple(args, "O", &n))
return NULL;
return Py_BuildValue("[i]", sorting(n));
}
static PyMethodDef myMethods[] = {
{ "selectSort", selectSort, METH_VARARGS, "Applying selection sort" },
{ NULL, NULL, 0, NULL }
};
static struct PyModuleDef myModule = {
PyModuleDef_HEAD_INIT,
"myModule",
"Test Module",
-1,
myMethods
};
PyMODINIT_FUNC PyInit_myModule(void)
{
return PyModule_Create(&myModule);
}
是不是把数组传给python的问题?或者我不应该使用“O”或“[i]”?
【问题讨论】:
-
您所显示的内容本身不会产生任何输出。您肯定是从 Python 调用此代码吗?请出示minimal reproducible example。
-
我相信您需要在 return 语句中使用
[iiii](列表中每个元素的i)。也许this answer 会有所帮助。 -
int sorting(int n[])返回一个整数,因此[i]是正确的(但当然不是所需的行为) -
@DavidW - 声明肯定声明
sorting返回单个int,但是n被初始化为20000 的数组大小,并且n在整个函数中都被索引。看来该函数旨在返回数组(尽管在 C 中不可能)。除非指针被返回? -
这段代码有很多错误。你编译的时候不会收到一堆警告吗?
标签: python python-c-api