gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:10 27 4
gpt4 key购买 nike

我的 C 应用程序正在加载 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。有什么建议/意见/解决方法吗?

我的问题的背景是,我需要比已知列表项及其计数更早地创建列表。

最佳答案

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

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

列表内部分配的空间多于其需要的空间,只需偶尔重新分配即可。您无法控制这一点。

关于python - 有没有办法使用 Python-C API 调整 python 列表的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com