mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			2 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(PyObject *ob)
 | |
| 
 | |
|    Return true if *ob* is a cell object; *ob* must not be ``NULL``.  This
 | |
|    function always succeeds.
 | |
| 
 | |
| 
 | |
| .. 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*, which can be ``NULL``.
 | |
|    If *cell* is not a cell object, returns ``NULL`` with an exception set.
 | |
| 
 | |
| 
 | |
| .. 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``.
 | |
| 
 | |
|    On success, return ``0``.
 | |
|    If *cell* is not a cell object, set an exception and return ``-1``.
 | |
| 
 | |
| 
 | |
| .. 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.
 | 
