Tuple Objects¶
- PyTypeObject
PyTuple_Type
¶ PyTypeObject
的这个实例表示Python元组类型;它与Python层中的tuple
是相同的对象。
- PyObject*
PyTuple_Pack
(Py_ssize_t n, ...)¶ - 返回值:新引用。
在失败时返回大小为n或NULL的新元组对象。元组值被初始化为指向Python对象的后续n C参数。
PyTuple_Pack(2, a, b)
等效于Py_BuildValue )“, a, b)
。
- 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)¶ - 返回值:新引用。
从低到高取由p指向的元组的一部分,并将其返回为新的元组。
- int
PyTuple_SetItem
(PyObject *p, Py_ssize_t pos, PyObject *o)¶ 在p指向的元组的位置pos插入对象o的引用。成功返回
0
。注意
此函数“窃取”对o的引用。
- void
PyTuple_SET_ITEM
(PyObject *p, Py_ssize_t pos, PyObject *o)¶ 像
PyTuple_SetItem()
,但没有错误检查,应该仅用于填充全新的元组。注意
此函数“窃取”对o的引用。
- int
_PyTuple_Resize
(PyObject **p, Py_ssize_t newsize)¶ 可以用来调整元组大小。newsize将是元组的新长度。因为元组假定是不可变的,所以只有当对象只有一个引用时才使用。如果元组对于代码的某些其他部分可能已经知道,请使用不。元组将总是在结束时增长或收缩。认为这是破坏旧的元组和创建一个新的,只有更有效率。成功返回
0
。客户端代码不应该假设*p
的结果值与调用此函数之前相同。如果替换*p
引用的对象,则会破坏原始*p
。失败时返回-1
并将*p
设置为NULL,并引发MemoryError
或SystemError
- int
PyTuple_ClearFreeList
()¶ 清除空闲列表。返回已释放项目的总数。
Struct Sequence Objects¶
结构序列对象是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中的新功能。
-
PyStructSequence_Desc
¶ 包含要创建的结构序列类型的元信息。
领域 C类型 含义 name
char *
结构序列类型的名称 doc
char *
指向docstring的类型的指针或要省略的NULL fields
PyStructSequence_Field *
指向NULL的终结数组,字段名称为新类型 n_in_sequence
int
Python端可见的字段数(如果用作元组)
-
PyStructSequence_Field
¶ 描述结构序列的字段。由于结构序列被建模为元组,所有字段都被键入为
PyObject*
。PyStructSequence_Desc
的fields
数组中的索引确定描述结构序列的哪个字段。领域 C类型 含义 name
char *
名称或NULL以结束命名字段的列表,设置为PyStructSequence_UnnamedField以保留未命名 doc
char *
字段docstring或NULL以省略
- char*
PyStructSequence_UnnamedField
¶ 特殊值为字段名留下未命名。
- PyObject*
PyStructSequence_New
(PyTypeObject *type)¶ 创建类型的实例,它必须使用
PyStructSequence_NewType()
创建。
- void
PyStructSequence_SetItem
(PyObject *p, Py_ssize_t pos, PyObject *o)¶ 将结构序列 p的索引pos处的字段设置为值o。像
PyTuple_SET_ITEM()
,这只应该用于填充全新的实例。注意
此函数“窃取”对o的引用。
- PyObject*
PyStructSequence_SET_ITEM
(PyObject *p, Py_ssize_t *pos, PyObject *o)¶ 宏等效于
PyStructSequence_SetItem()
。注意
此函数“窃取”对o的引用。