# Cell 物件

"Cell" 物件用於實現被多個作用域所參照 (reference) 的變數。對於每個這樣的變數，都會有個 cell 物件為了儲存該值而被建立；參照該值的每個 stack frame 中的區域性變數包含外部作用域的 cell 參照，它同樣使用了該變數。存取該值時，將使用 cell 中包含的值而不是 cell 物件本身。這種對 cell 物件的去除參照 (de-reference) 需要生成的位元組碼 (byte-code) 有支援；存取時不會自動去除參照。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 物件。