元组对象¶
-
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()
类似,但不对其参数进行错误检查,并且 只 应用于填充全新的元组。如果在 调试模式 或
with assertions
下构建 Python,则会执行边界检查作为断言。备注
此函数“窃取”对 o 的引用,并且,与
PyTuple_SetItem()
不同,它 不 丢弃对任何被替换项目的引用;元组中位置 pos 处的任何引用都将泄漏。警告
此宏 只 应用于新创建的元组。在已经在使用中的元组(或者换句话说,其引用计数 > 1)上使用此宏可能会导致未定义的行为。
-
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 版本加入。
-
类型 PyStructSequence_Desc¶
- 稳定 ABI 的一部分(包括所有成员)。
包含要创建的结构序列类型的元信息。
-
const char *name¶
类型的完全限定名称;以空字符结尾的 UTF-8 编码。名称必须包含模块名。
-
const char *doc¶
指向该类型文档字符串的指针,或
NULL
表示省略。
-
PyStructSequence_Field *fields¶
指向以
NULL
结尾的数组的指针,其中包含新类型的字段名。
-
int n_in_sequence¶
Python 侧可见的字段数量(如果用作元组)。
-
const char *name¶
-
类型 PyStructSequence_Field¶
- 稳定 ABI 的一部分(包括所有成员)。
描述结构序列的一个字段。由于结构序列被建模为元组,所有字段都被类型化为 PyObject*。
PyStructSequence_Desc
的fields
数组中的索引决定了哪个结构序列字段被描述。-
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 的实例,该类型必须已通过
PyStructSequence_NewType()
创建。如果失败,则返回
NULL
并设置异常。
-
PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)¶
- 返回值: 借用引用。 稳定ABI 的一部分。
返回指针 p 所指向结构序列中位置 pos 的对象。
如果在 调试模式 或
with assertions
下构建 Python,则会执行边界检查作为断言。
-
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()
类似,这只应用于填充全新的实例。如果在 调试模式 或
with assertions
下构建 Python,则会执行边界检查作为断言。备注
此函数“窃取”对 o 的引用。
-
void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)¶
PyStructSequence_SetItem()
的别名。3.13 版本中已变更: 现在作为
PyStructSequence_SetItem()
的别名实现。