mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			63 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
|   | .. highlightlang:: 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.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. ctype:: PyCellObject
 | ||
|  | 
 | ||
|  |    The C structure used for cell objects.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. cvar:: PyTypeObject PyCell_Type
 | ||
|  | 
 | ||
|  |    The type object corresponding to cell objects.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. cfunction:: int PyCell_Check(ob)
 | ||
|  | 
 | ||
|  |    Return true if *ob* is a cell object; *ob* must not be *NULL*.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. cfunction:: PyObject* PyCell_New(PyObject *ob)
 | ||
|  | 
 | ||
|  |    Create and return a new cell object containing the value *ob*. The parameter may
 | ||
|  |    be *NULL*.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. cfunction:: PyObject* PyCell_Get(PyObject *cell)
 | ||
|  | 
 | ||
|  |    Return the contents of the cell *cell*.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. cfunction:: PyObject* PyCell_GET(PyObject *cell)
 | ||
|  | 
 | ||
|  |    Return the contents of the cell *cell*, but without checking that *cell* is
 | ||
|  |    non-*NULL* and a cell object.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. cfunction:: 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.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. cfunction:: 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.
 |