有没有办法使用Python-C API调整python列表的大小?

问题描述 投票:1回答:1

我的C-application正在加载python解释器dll并调用函数list = PyList_New(len)来创建一个新的'len'大小的python列表。 两个问题: 1.如果我将PyList_Append(list, item)称为len以上,会发生什么?我认为它应该抛出异常。我的理解是否正确? 2.更重要的是,我的第二个问题是是否有办法调整清单的大小?我查看了c API:https://docs.python.org/2/c-api/list.html#c.PyList_SetItem,但找不到这样的API。任何建议/意见/解决方法?

我的问题的上下文是我需要比列表项及其计数已知的更早地创建列表。

python python-3.x python-2.7 python-c-api
1个回答
0
投票

PyList_New创建了一个填充NULL指针的列表。在将列表发送回Python或调用任何Python函数之前,你应该使用PyList_SetItem设置所有这些指针。

PyList_Append(和PyList_Insert)实际上只相当于从Python调用somelist.append(和somelist.insert)。他们为您调整列表大小。我不是100%肯定他们是否考虑任何NULL元素,所以最好不要在你从PyList_New制作的列表中调用它们并且你还没有完全填满。你正在做什么(用一些NULL指针分配列表然后附加它)肯定是错误的,因为NULL指针永远不会被填充。相反,你应该只是在从空构建的列表中使用PyList_AppendPyList_Insert。您也可以调用list.extend一次向列表中添加多个元素 - 没有通过C API直接访问它,但您可以通过PyObject_CallMethodObjArgs或类似方法调用它。

在内部,列表分配的空间超出了它所需的空间,因为它只需要偶尔重新分配。你无法控制它。

© www.soinside.com 2019 - 2024. All rights reserved.