# Cell 对象

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

type PyCellObject

  用于 Cell 对象的 C 结构体。

PyTypeObject PyCell_Type

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

int PyCell_Check(PyObject *ob)

  如果 ob 是一个 cell 对象则返回真值；ob 必须不为 `NULL`。此函数总是会成功执行。

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

  创建并返回一个包含值 ob 的新 cell 对象。形参可以为 `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 对象。