Python 使用Py_BuildValue()在C中创建元组列表
我试图使用Python 使用Py_BuildValue()在C中创建元组列表,python,c,pyobject,Python,C,Pyobject,我试图使用Py\u BuildValue()在C中创建元组列表 我试图构建的内容如下所示: [ (...), (...), ... ] 我不知道编译时要创建的元组数量,所以这里不能使用一些静态数量 基本上,将Py\u BuildValue()与一个元组一起使用,这就是代码的外观: PyObject * Py_BuildValue("[(siis)]", name, num1, num2, summary); 但这只适用于一个元组。我需要在列表中有多个元组,可以通过for循环添加这些元组。我
Py\u BuildValue()
在C中创建元组列表
我试图构建的内容如下所示:
[ (...), (...), ... ]
我不知道编译时要创建的元组数量,所以这里不能使用一些静态数量
基本上,将Py\u BuildValue()
与一个元组一起使用,这就是代码的外观:
PyObject * Py_BuildValue("[(siis)]", name, num1, num2, summary);
但这只适用于一个元组。我需要在列表中有多个元组,可以通过for循环添加这些元组。我如何才能做到这一点?您可以使用、、和来实现这一点
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) {
// ...
}
}
是否有理由使用
PyLong
与PyInt
相比?我有一些整数,如示例中所示,它们是num1
和num2
。它们不是很长,但我假设有一个原因我仍然想像你一样使用PyLong
?对于以null结尾的char*string
,我想使用哪个函数?查看文档,我可以使用很多版本的PyString
。@Fogest:在CPython 3上,PyInt
不再存在,所有整数都由PyLong
对象表示。啊,感谢您的解释。PyString区域是否有类似的案例,或者我是否应该选择一个适合我的案例?您可能希望通过转换到CPython 3来查看。这里有一整段关于字符串的内容,这些内容发生了很大的变化。哦,哇,听起来CPython3中没有PyString。好的,我将研究一下如何使用PyUnicode
。谢谢你的帮助,我已经接受了你的回答,因为它确实解决了我的问题!
[(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15)]