元组对象¶
-
PyTypeObject
PyTuple_Type
¶ - Part of the Stable ABI.
PyTypeObject
的实例代表一个 Python 元组类型,这与 Python 层面的tuple
是相同的对象。
-
PyObject *
PyTuple_New
(Py_ssize_t len)¶ - Return value: New reference. Part of the Stable ABI.
成功时返回一个新的元组对象,长度为 len,失败时返回``NULL``。
-
PyObject *
PyTuple_Pack
(Py_ssize_t n, ...)¶ - Return value: New reference. Part of the Stable ABI.
成功时返回一个新的元组对象,大小为 n ,失败时返回
NULL
。 元组值初始化为指向 Python 对象的后续 n 个 C 参数。PyTuple_Pack(2, a, b)
和Py_BuildValue("(OO)", a, b)
相等。
-
Py_ssize_t
PyTuple_Size
(PyObject *p)¶ - Part of the Stable ABI.
获取指向元组对象的指针,并返回该元组的大小。
-
PyObject *
PyTuple_GetItem
(PyObject *p, Py_ssize_t pos)¶ - Return value: Borrowed reference. Part of the Stable ABI.
返回 p 所指向的元组中位于 pos 处的对象。 如果 pos 为负值或超出范围,则返回
NULL
并设置一个IndexError
异常。
-
PyObject *
PyTuple_GET_ITEM
(PyObject *p, Py_ssize_t pos)¶ - Return value: Borrowed reference.
类似于
PyTuple_GetItem()
,但不检查其参数。
-
PyObject *
PyTuple_GetSlice
(PyObject *p, Py_ssize_t low, Py_ssize_t high)¶ - Return value: New reference. Part of the Stable ABI.
返回 p 所指向的元组的切片,在 low 和 high 之间,或者在失败时返回
NULL
。 这等同于 Python 表达式p[low:high]
。 不支持从列表末尾索引。
-
int
PyTuple_SetItem
(PyObject *p, Py_ssize_t pos, PyObject *o)¶ - Part of the Stable 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)¶ - Return value: New reference. Part of the Stable 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
¶ - Part of the Stable ABI.
包含要创建的结构序列类型的元信息。
域
C 类型
含意
name
const char *
结构序列类型的名称
doc
const char *
指向要忽略类型的文档字符串或
NULL
的指针fields
PyStructSequence_Field *
指向以
NULL
结尾的数组的指针,其字段名称为新类型n_in_sequence
int
Python侧可见的字段数(如果用作元组)
-
type
PyStructSequence_Field
¶ - Part of the Stable ABI.
描述结构序列的一个字段。 当结构序列被建模为元组时,所有字段的类型都是 PyObject*。 在
PyStructSequence_Desc
的fields
数组中的索引确定了结构序列描述的是哪个字段。域
C 类型
含意
name
const char *
字段的名称或
NULL
,若要结束命名字段的列表,请设置为PyStructSequence_UnnamedField
以保留未命名字段doc
const char *
要忽略的字段文档字符串或
NULL
-
const char *const
PyStructSequence_UnnamedField
¶ 字段名的特殊值将保持未命名状态。
在 3.9 版更改: 这个类型已从
char *
更改。
-
PyObject *
PyStructSequence_New
(PyTypeObject *type)¶ - Return value: New reference. Part of the Stable ABI.
创建 type 的实例,该实例必须使用
PyStructSequence_NewType()
创建。
-
PyObject *
PyStructSequence_GetItem
(PyObject *p, Py_ssize_t pos)¶ - Return value: Borrowed reference. Part of the Stable ABI.
返回 p 所指向的结构序列中,位于 pos 处的对象。不需要进行边界检查。
-
void
PyStructSequence_SetItem
(PyObject *p, Py_ssize_t pos, PyObject *o)¶ - Part of the Stable ABI.
将结构序列 p 的索引 pos 处的字段设置为值 o。 与
PyTuple_SET_ITEM()
一样,它应该只用于填充全新的实例。注解
这个函数“窃取”了指向 o 的一个引用。
-
void
PyStructSequence_SET_ITEM
(PyObject *p, Py_ssize_t *pos, PyObject *o)¶ PyStructSequence_SetItem()
的宏版本。注解
这个函数“窃取”了指向 o 的一个引用。