- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 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_Append
和 PyList_Insert
位于从空构建的列表上。您还可以调用 list.extend
一次将多个元素添加到列表中 - 无法通过 C API 直接访问它,但您可以通过 PyObject_CallMethodObjArgs
调用它或类似。
列表内部分配的空间多于其需要的空间,只需偶尔重新分配即可。您无法控制这一点。
关于python - 有没有办法使用 Python-C API 调整 python 列表的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901806/
我是一名优秀的程序员,十分优秀!