元组对象¶
-
PyTypeObject PyTuple_Type¶
- 是 稳定 ABI 的一部分。
此
PyTypeObject
实例表示 Python 元组类型;它与 Python 层中的tuple
是同一个对象。
-
PyObject *PyTuple_New(Py_ssize_t len)¶
- 返回值:新引用。 是 稳定 ABI 的一部分。
返回一个大小为 len 的新元组对象,如果失败则返回
NULL
。
-
PyObject *PyTuple_Pack(Py_ssize_t n, ...)¶
- 返回值:新引用。 是 稳定 ABI 的一部分。
返回一个大小为 n 的新元组对象,如果失败则返回
NULL
。元组值初始化为指向 Python 对象的后续 n 个 C 参数。PyTuple_Pack(2, a, b)
等效于Py_BuildValue("(OO)", a, b)
。
-
Py_ssize_t PyTuple_Size(PyObject *p)¶
- 是 稳定 ABI 的一部分。
获取指向元组对象的指针,并返回该元组的大小。
-
Py_ssize_t PyTuple_GET_SIZE(PyObject *p)¶
返回元组 p 的大小,该元组必须是非
NULL
且指向元组;不执行任何错误检查。
-
PyObject *PyTuple_GetItem(PyObject *p, Py_ssize_t pos)¶
- 返回值:借用引用。 属于 稳定 ABI 的一部分。
返回 p 指向的元组中位置 pos 处的对象。如果 pos 为负数或超出范围,则返回
NULL
并设置一个IndexError
异常。返回的引用是从元组 p 借用的(也就是说:它仅在您持有对 p 的引用时有效)。要获得 强引用,请使用
Py_NewRef(PyTuple_GetItem(...))
或PySequence_GetItem()
。
-
PyObject *PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)¶
- 返回值:借用引用。
类似于
PyTuple_GetItem()
,但不检查其参数。
-
PyObject *PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)¶
- 返回值:新引用。 是 稳定 ABI 的一部分。
返回由 *p* 指向的元组在 *low* 和 *high* 之间的切片,或在失败时返回
NULL
。这等效于 Python 表达式p[low:high]
。不支持从元组末尾索引。
-
int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)¶
- 是 稳定 ABI 的一部分。
在由 *p* 指向的元组的 *pos* 位置插入对对象 *o* 的引用。成功时返回
0
。如果 *pos* 超出范围,则返回-1
并设置IndexError
异常。注意
此函数“窃取”对 *o* 的引用,并丢弃对元组中受影响位置的项目的引用。
-
void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)¶
类似于
PyTuple_SetItem()
,但不进行错误检查,并且应 *仅* 用于填充全新的元组。注意
此函数“窃取”对 *o* 的引用,并且与
PyTuple_SetItem()
不同,*不* 丢弃对任何被替换项目的引用;元组中 *pos* 位置的任何引用都将被泄漏。
-
int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)¶
可用于调整元组的大小。newsize 将是元组的新长度。由于元组应该不可变,因此只有在对象只有一个引用时才应使用此方法。如果元组可能已经被代码的其他部分知道,请不要使用此方法。元组总是会在末尾增长或缩小。可以将其视为销毁旧元组并创建一个新的元组,只是效率更高。成功时返回
0
。客户端代码不应该假设*p
的结果值与调用此函数之前相同。如果*p
引用的对象被替换,则原始的*p
将被销毁。失败时,返回-1
并将*p
设置为NULL
,并引发MemoryError
或SystemError
。
结构序列对象¶
结构序列对象是 namedtuple()
对象的 C 等效项,即其项目也可以通过属性访问的序列。要创建结构序列,您首先必须创建一个特定的结构序列类型。
-
PyTypeObject *PyStructSequence_NewType(PyStructSequence_Desc *desc)¶
- 返回值:新引用。 是 稳定 ABI 的一部分。
根据下面描述的 desc 中的数据创建一个新的结构序列类型。可以使用
PyStructSequence_New()
创建结果类型的实例。
-
void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)¶
从 desc 中就地初始化结构序列类型 type。
-
int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)¶
与
PyStructSequence_InitType
相同,但在成功时返回0
,失败时返回-1
。在版本 3.4 中添加。
-
type PyStructSequence_Desc¶
- 作为 稳定 ABI 的一部分(包括所有成员)。
包含要创建的结构序列类型的元信息。
-
const char *name¶
结构序列类型的名称。
-
const char *doc¶
指向类型文档字符串的指针,或
NULL
以省略。
-
PyStructSequence_Field *fields¶
指向包含新类型字段名称的以
NULL
结尾的数组的指针。
-
int n_in_sequence¶
对 Python 端可见的字段数量(如果用作元组)。
-
const char *name¶
-
type PyStructSequence_Field¶
- 作为 稳定 ABI 的一部分(包括所有成员)。
描述结构序列的字段。由于结构序列被建模为元组,因此所有字段都被类型化为 PyObject*。在
fields
数组中的索引PyStructSequence_Desc
确定描述了结构序列的哪个字段。-
const char *name¶
字段名称,或
NULL
以结束命名字段列表,设置为PyStructSequence_UnnamedField
以保持未命名。
-
const char *doc¶
字段文档字符串,或
NULL
以省略。
-
const char *name¶
-
const char *const PyStructSequence_UnnamedField¶
- 作为 稳定 ABI 的一部分,从版本 3.11 开始。
字段名称的特殊值,使其保持未命名。
在版本 3.9 中更改: 类型从
char *
更改。
-
PyObject *PyStructSequence_New(PyTypeObject *type)¶
- 返回值:新引用。 是 稳定 ABI 的一部分。
使用
PyStructSequence_NewType()
创建的 type 实例。
-
PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)¶
- 返回值:借用引用。 属于 稳定 ABI 的一部分。
返回 p 指向的结构化序列中位置 pos 处的对象。不执行边界检查。
-
PyObject *PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)¶
- 返回值:借用引用。
PyStructSequence_GetItem()
的宏等效项。
-
void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)¶
- 是 稳定 ABI 的一部分。
将结构化序列 p 中索引为 pos 的字段设置为值 o。与
PyTuple_SET_ITEM()
一样,这应该只用于填充全新的实例。注意
此函数“窃取”了对 o 的引用。
-
void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)¶
类似于
PyStructSequence_SetItem()
,但实现为静态内联函数。注意
此函数“窃取”了对 o 的引用。