mirror of https://github.com/python/cpython
63 lines
1.9 KiB
ReStructuredText
63 lines
1.9 KiB
ReStructuredText
.. highlight:: c
|
|
|
|
.. _cell-objects:
|
|
|
|
Cell Objects
|
|
------------
|
|
|
|
"Cell" objects are used to implement variables referenced by multiple scopes.
|
|
For each such variable, a cell object is created to store the value; the local
|
|
variables of each stack frame that references the value contains a reference to
|
|
the cells from outer scopes which also use that variable. When the value is
|
|
accessed, the value contained in the cell is used instead of the cell object
|
|
itself. This de-referencing of the cell object requires support from the
|
|
generated byte-code; these are not automatically de-referenced when accessed.
|
|
Cell objects are not likely to be useful elsewhere.
|
|
|
|
|
|
.. c:type:: PyCellObject
|
|
|
|
The C structure used for cell objects.
|
|
|
|
|
|
.. c:var:: PyTypeObject PyCell_Type
|
|
|
|
The type object corresponding to cell objects.
|
|
|
|
|
|
.. c:function:: int PyCell_Check(ob)
|
|
|
|
Return true if *ob* is a cell object; *ob* must not be *NULL*.
|
|
|
|
|
|
.. c:function:: PyObject* PyCell_New(PyObject *ob)
|
|
|
|
Create and return a new cell object containing the value *ob*. The parameter may
|
|
be *NULL*.
|
|
|
|
|
|
.. c:function:: PyObject* PyCell_Get(PyObject *cell)
|
|
|
|
Return the contents of the cell *cell*.
|
|
|
|
|
|
.. c:function:: PyObject* PyCell_GET(PyObject *cell)
|
|
|
|
Return the contents of the cell *cell*, but without checking that *cell* is
|
|
non-*NULL* and a cell object.
|
|
|
|
|
|
.. c:function:: int PyCell_Set(PyObject *cell, PyObject *value)
|
|
|
|
Set the contents of the cell object *cell* to *value*. This releases the
|
|
reference to any current content of the cell. *value* may be *NULL*. *cell*
|
|
must be non-*NULL*; if it is not a cell object, ``-1`` will be returned. On
|
|
success, ``0`` will be returned.
|
|
|
|
|
|
.. c:function:: void PyCell_SET(PyObject *cell, PyObject *value)
|
|
|
|
Sets the value of the cell object *cell* to *value*. No reference counts are
|
|
adjusted, and no checks are made for safety; *cell* must be non-*NULL* and must
|
|
be a cell object.
|