Cell 对象

“Cell”对象用于实现被多个作用域引用的变量。对于每个这样的变量,都会创建一个 cell 对象来存储该值;每个引用该值的堆栈帧的局部变量都包含对来自也使用该变量的外部作用域的 cell 的引用。当访问该值时,将使用 cell 中包含的值,而不是 cell 对象本身。对 cell 对象的这种解引用需要生成的字节码的支持;当访问时,它们不会自动解引用。Cell 对象在其他地方不太可能有用。

type PyCellObject

用于 cell 对象的 C 结构体。

PyTypeObject PyCell_Type

与 cell 对象对应的类型对象。

int PyCell_Check(PyObject *ob)

如果 *ob* 是一个 cell 对象,则返回 true;*ob* 不能为 NULL。此函数始终成功。

PyObject *PyCell_New(PyObject *ob)
返回值:新引用。

创建并返回一个新的 cell 对象,其中包含值 *ob*。参数可以为 NULL

PyObject *PyCell_Get(PyObject *cell)
返回值:新引用。

返回 cell *cell* 的内容,该内容可以为 NULL。如果 *cell* 不是一个 cell 对象,则返回 NULL 并设置一个异常。

PyObject *PyCell_GET(PyObject *cell)
返回值:借用的引用。

返回 cell *cell* 的内容,但不检查 *cell* 是否为非 NULL 和 cell 对象。

int PyCell_Set(PyObject *cell, PyObject *value)

将 cell 对象 *cell* 的内容设置为 *value*。这将释放对 cell 当前内容的引用。*value* 可以为 NULL。*cell* 必须为非 NULL

成功时,返回 0。如果 *cell* 不是一个 cell 对象,则设置一个异常并返回 -1

void PyCell_SET(PyObject *cell, PyObject *value)

将 cell 对象 *cell* 的值设置为 *value*。不调整引用计数,也不进行安全检查;*cell* 必须为非 NULL 并且必须是一个 cell 对象。