Code objects represent byte-compiled executable Python code, or bytecode. The difference between a code object and a function object is that the function object contains an explicit reference to the function’s globals (the module in which it was defined), while a code object contains no context; also the default argument values are stored in the function object, not in the code object (because they represent values calculated at run-time). Unlike function objects, code objects are immutable and contain no references (directly or indirectly) to mutable objects.
Special read-only attributes:
- co_name gives the function name
- co_argcount is the number of positional arguments (including arguments with default values)
- co_nlocals is the number of local variables used by the function (including arguments)
- co_varnames is a tuple containing the names of the local variables (starting with the argument names)
- co_cellvars is a tuple containing the names of local variables that are referenced by nested functions
- co_freevars is a tuple containing the names of free variables
- co_code is a string representing the sequence of bytecode instructions
- co_consts is a tuple containing the literals used by the bytecode
- co_names is a tuple containing the names used by the bytecode
- co_filename is the filename from which the code was compiled
- co_firstlineno is the first line number of the function
- co_lnotab is a string encoding the mapping from byte code offsets to line numbers (for details see the source code of the interpreter)
- co_stacksize is the required stack size (including local variables)
- co_flags is an integer encoding a number of flags for the interpreter.
The following flag bits are defined for co_flags: bit
0x04 is set
if the function uses the “*arguments” syntax to accept an arbitrary
number of positional arguments; bit
0x08 is set if the function uses
the “**keywords” syntax to accept arbitrary keyword arguments; bit
0x20 is set if the function is a generator.
Future feature declarations (“from __future__ import division”)
also use bits in co_flags to indicate whether a code object was
compiled with a particular feature enabled: bit
0x2000 is set if the
function was compiled with future division enabled; bits
0x1000 were used in earlier versions of Python.
Other bits in co_flags are reserved for internal use.
If a code object represents a function, the first item in co_consts is the documentation string of the function, or None if undefined.