元组对象 — Python 文档

来自菜鸟教程
Python/docs/3.9/c-api/tuple
跳转至:导航、​搜索

元组对象

type PyTupleObject
PyObject 的这个子类型代表一个 Python 元组对象。
PyTypeObject PyTuple_Type
PyTypeObject的这个实例代表了Python元组类型; 它与 Python 层中的 tuple 对象相同。
int PyTuple_Check(PyObject *p)
如果 p 是元组对象或元组类型的子类型的实例,则返回 true。 此功能总是成功。
int PyTuple_CheckExact(PyObject *p)
如果 p 是元组对象,但不是元组类型的子类型的实例,则返回 true。 此功能总是成功。
PyObject *PyTuple_New(Py_ssize_t len)
失败时返回大小为 lenNULL 的新元组对象。
PyObject *PyTuple_Pack(Py_ssize_t n, ...)
失败时返回大小为 nNULL 的新元组对象。 元组值被初始化为指向 Python 对象的后续 n C 参数。 PyTuple_Pack(2, a, b) 相当于 Py_BuildValue("(OO)", a, b)
Py_ssize_t PyTuple_Size(PyObject *p)
获取一个指向元组对象的指针,并返回该元组的大小。
Py_ssize_t PyTuple_GET_SIZE(PyObject *p)
返回元组p的大小,必须是非NULL并指向一个元组; 不执行错误检查。
PyObject *PyTuple_GetItem(PyObject *p, Py_ssize_t pos)
返回 p 指向的元组中位置 pos 处的对象。 如果 pos 超出范围,则返回 NULL 并设置 IndexError 异常。
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)
lowhigh 之间返回 p 指向的元组的切片,或者在失败时返回 NULL。 这相当于 Python 表达式 p[low:high]。 不支持从列表末尾开始索引。
int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)

p 指向的元组的位置 pos 处插入对对象 o 的引用。 成功返回 0。 如果 pos 超出范围,则返回 -1 并设置 IndexError 异常。

笔记

此函数“窃取”对 o 的引用,并丢弃对受影响位置元组中已有项目的引用。

void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)

类似于 PyTuple_SetItem(),但不做错误检查,应该使用 only 来填充全新的元组。

笔记

这个宏“窃取”了对 o 的引用,并且与 PyTuple_SetItem() 不同, 丢弃对任何被替换项的引用; 元组中位于 pos 位置的任何引用都将被泄露。

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)
可用于调整元组的大小。 newsize 将是元组的新长度。 因为元组 supposed 是不可变的,所以只有当对象只有一个引用时才应该使用它。 如果代码的其他部分可能已经知道元组,请不要 使用它。 元组最终将始终增长或缩小。 将此视为销毁旧元组并创建一个新元组,只会更有效。 成功返回 0。 客户端代码永远不应该假设 *p 的结果值将与调用此函数之前相同。 如果*p引用的对象被替换,原来的*p被破坏。 失败时,返回 -1 并将 *p 设置为 NULL,并引发 MemoryErrorSystemError


结构序列对象

结构序列对象是 namedtuple() 对象的 C 等价物,即 一个序列,其项目也可以通过属性访问。 要创建结构序列,首先必须创建特定的结构序列类型。

PyTypeObject *PyStructSequence_NewType(PyStructSequence_Desc *desc)
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

包含要创建的结构序列类型的元信息。

场地

C型

意义

name

const char *

结构序列类型的名称

doc

const char *

指向类型的文档字符串的指针或要省略的 NULL

fields

PyStructSequence_Field *

指向具有新类型字段名称的 NULL 终止数组的指针

n_in_sequence

int

Python 端可见的字段数(如果用作元组)

type PyStructSequence_Field

描述结构序列的字段。 由于结构序列被建模为元组,因此所有字段的类型都为 PyObject*PyStructSequence_Descfields 数组中的索引决定了描述结构序列的哪个字段。

场地

C型

意义

name

const char *

字段名称或 NULL 结束命名字段列表,设置为 PyStructSequence_UnnamedField 以保持未命名

doc

const char *

字段文档字符串或 NULL 省略

const char *const PyStructSequence_UnnamedField

字段名称的特殊值以使其未命名。

3.9 版本变更: 类型由 char * 变更。

PyObject *PyStructSequence_New(PyTypeObject *type)
创建 type 的实例,该实例必须使用 PyStructSequence_NewType() 创建。
PyObject *PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
返回 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)

将结构序列 p 的索引 pos 处的字段设置为值 o。 像 PyTuple_SET_ITEM(),这应该只用于填充全新的实例。

笔记

此函数“窃取”对 o 的引用。

void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)

PyStructSequence_SetItem() 的宏等效项。

笔记

此函数“窃取”对 o 的引用。