元组对象¶
-
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 的一部分。
获取一个指向元组对象的指针,并返回该元组的大小。如果发生错误,则返回
-1
并设置异常。
-
Py_ssize_t PyTuple_GET_SIZE(PyObject *p)¶
与
PyTuple_Size()
类似,但没有错误检查。
-
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()
,但不执行错误检查,并且应该仅用于填充全新的元组。如果 Python 在 调试模式 或
with assertions
中构建,则边界检查将作为断言执行。注意
此函数“窃取”对 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()
创建结果类型的实例。失败时返回
NULL
并设置异常。
-
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¶
类型的完全限定名称;以 null 结尾的 UTF-8 编码。该名称必须包含模块名称。
-
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¶
- 自 3.11 版本以来,稳定 ABI 的一部分。
用于将字段名称保留为未命名的特殊值。
在 3.9 版本中更改:类型已从
char *
更改。
-
PyObject *PyStructSequence_New(PyTypeObject *type)¶
- 返回值:新的引用。属于 稳定 ABI 的一部分。
创建 type 的一个实例,该 type 必须使用
PyStructSequence_NewType()
创建。失败时返回
NULL
并设置异常。
-
PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)¶
- 返回值:借用的引用。属于 稳定 ABI 的一部分。
返回 p 指向的结构序列中位置 pos 的对象。
如果 Python 在 调试模式 或
with assertions
中构建,则边界检查将作为断言执行。
-
PyObject *PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)¶
- 返回值:借用的引用。
是
PyStructSequence_GetItem()
的别名。在 3.13 版本中变更: 现在作为
PyStructSequence_GetItem()
的别名实现。
-
void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)¶
- 属于 稳定 ABI 的一部分。
将结构序列 p 中索引为 pos 的字段设置为值 o。与
PyTuple_SET_ITEM()
类似,此函数只应用于填充全新的实例。如果 Python 在 调试模式 或
with assertions
中构建,则边界检查将作为断言执行。注意
此函数会“窃取”对 o 的引用。
-
void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)¶
是
PyStructSequence_SetItem()
的别名。在 3.13 版本中变更: 现在作为
PyStructSequence_SetItem()
的别名实现。