使用 Py_BuildValue() 在 C 中创建元组列表
Using Py_BuildValue() to create a list of tuples in C
我正在尝试使用 Py_BuildValue()
在 C 中创建元组列表。
我正在尝试构建的内容如下所示:
[ (...), (...), ... ]
我不知道在编译时要创建的元组数量,所以我不能在这里使用一些静态数量。
基本上使用 Py_BuildValue()
和一个元组是代码的样子:
PyObject * Py_BuildValue("[(siis)]", name, num1, num2, summary);
但这只能用于一个元组。我需要在列表中有多个元组,我可以通过 for 循环添加这些元组。我怎样才能做到这一点?
您可以使用 PyList_New()
, PyTuple_New()
, PyList_Append()
, and PyTuple_SetItem()
来完成此...
const Py_ssize_t tuple_length = 4;
const unsigned some_limit = 4;
PyObject *my_list = PyList_New(0);
if(my_list == NULL) {
// ...
}
for(unsigned i = 0; i < some_limit; i++) {
PyObject *the_tuple = PyTuple_New(tuple_length);
if(the_tuple == NULL) {
// ...
}
for(Py_ssize_t j = 0; i < tuple_length; i++) {
PyObject *the_object = PyLong_FromSsize_t(i * tuple_length + j);
if(the_object == NULL) {
// ...
}
PyTuple_SET_ITEM(the_tuple, j, the_object);
}
if(PyList_Append(my_list, the_tuple) == -1) {
// ...
}
}
这将创建一个列表...
[(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15)]
我正在尝试使用 Py_BuildValue()
在 C 中创建元组列表。
我正在尝试构建的内容如下所示:
[ (...), (...), ... ]
我不知道在编译时要创建的元组数量,所以我不能在这里使用一些静态数量。
基本上使用 Py_BuildValue()
和一个元组是代码的样子:
PyObject * Py_BuildValue("[(siis)]", name, num1, num2, summary);
但这只能用于一个元组。我需要在列表中有多个元组,我可以通过 for 循环添加这些元组。我怎样才能做到这一点?
您可以使用 PyList_New()
, PyTuple_New()
, PyList_Append()
, and PyTuple_SetItem()
来完成此...
const Py_ssize_t tuple_length = 4;
const unsigned some_limit = 4;
PyObject *my_list = PyList_New(0);
if(my_list == NULL) {
// ...
}
for(unsigned i = 0; i < some_limit; i++) {
PyObject *the_tuple = PyTuple_New(tuple_length);
if(the_tuple == NULL) {
// ...
}
for(Py_ssize_t j = 0; i < tuple_length; i++) {
PyObject *the_object = PyLong_FromSsize_t(i * tuple_length + j);
if(the_object == NULL) {
// ...
}
PyTuple_SET_ITEM(the_tuple, j, the_object);
}
if(PyList_Append(my_list, the_tuple) == -1) {
// ...
}
}
这将创建一个列表...
[(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15)]