Python元组到C数组

标签 python c arrays tuples

我正在编写一个 C 函数,它采用 ints 的 Python tuple 作为参数。

static PyObject* lcs(PyObject* self, PyObject *args) {
    int *data;
    if (!PyArg_ParseTuple(args, "(iii)", &data)) {
        ....
    }
}

我可以转换固定长度的元组(此处为 3),但如何从任意长度的 tuple 中获取 C array

import lcs
lcs.lcs((1,2,3,4,5,6)) #<- C should receive it as {1,2,3,4,5,6}

编辑

我可以传递一个由“;”分隔的数字字符串来代替元组。例如 '1;2;3;4;5;6' 并将它们分隔到 C 代码中的数组中。但我认为这不是正确的做法。

static PyObject* lcs(PyObject* self, PyObject *args) {
    char *data;
    if (!PyArg_ParseTuple(args, "s", &data)) {
        ....
    }
    int *idata;
    //get ints from data(string) and place them in idata(array of ints)
}

编辑(解决方案)

我想我找到了解决办法:

static PyObject* lcs(PyObject* self, PyObject *args) {
    PyObject *py_tuple;
    int len;
    int *c_array;
    if (!PyArg_ParseTuple(args, "O", &py_tuple)) {
      return NULL;
    }
    len = PyTuple_Size(py_tuple);
    c_array= malloc(len*4);
    while (len--) {
        c_array[len] = (int) PyInt_AsLong(PyTuple_GetItem(py_tuple, len));
   //c_array is our array of ints :)
    }

最佳答案

使用 PyArg_VaParse:https://docs.python.org/2/c-api/arg.html#PyArg_VaParse 它与 va_list 一起使用,您可以在其中检索可变数量的参数。

更多信息在这里:http://www.cplusplus.com/reference/cstdarg/va_list/

因为它是一个元组,您可以使用元组函数:https://docs.python.org/2/c-api/tuple.html像 PyTuple_Size 和 PyTuple_GetItem

这里有一个如何使用它的例子:Python extension module with variable number of arguments

如果对您有帮助,请告诉我。

关于Python元组到C数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552315/

相关文章:

c - 下标具有寄存器存储类的数组

arrays - Shell Script 正则表达式匹配数组并处理每个数组元素

python - 如何将我的二进制 numpy 数组列表转换为图像?

python - 如何执行缓冲搜索和替换?

Python/sqlite : get column values as a list/tuple from rows where other columns have certain values

python - 为什么 Fabric 显示与服务器断开连接的消息将近 2 分钟?

javascript - jQuery 删除数组索引

python MySQLDb 插入准备好的语句

c - GSL 线性代数示例失败

c - 如何在c中立即启动定时器