支持循环垃圾收集 Python对检测和收集涉及循环引用的垃圾的支持需要来自对象类型的支持,对象类型是其他对象的“容器”,也可以是容器。不存储对其他对象的引用或仅存储对原子类型(如数字或字符串)的引用的类型不需要为garbagecollection提供任何显式支持. 要创建容器类型,类型对象的tp_flags字段必须包含Py_TPFLAGS_HAVE_GC并提供tp_traverse处理程序的实现。如果该类型的实例是可变的,那么tp_clear还必须提供实现. Py_TPFLAGS_HAVE_GC 具有此标志集的类型的对象必须符合此处记录的规则。为方便起见,这些对象将被称为容器对象. 容器类型的

公共对象结构 在Python的对象类型的定义中使用了大量结构。本节描述了这些结构及其使用方法. 所有Python对象最终在对象在内存中的表示开头共享少量字段。它们由PyObject和PyVarObject类型表示,它们又由一些宏的扩展定义,无论是直接还是间接地在所有其他Python对象的定义中使用. PyObject 所有对象类型都是此类型的扩展名。这是一种包含Python将对象指针作为对象处理的信息的类型。在正常的“发布”版本中,它只包含对象的引用计数和指向相应类型对象的指针。实际上没有声明为PyObject,但每个Python对象都可以转换为PyObject*。访问主题必须使用宏Py_RE

在堆上分配对象 PyObject * _PyObject_New( PyTypeObject  *type) Return value: New reference. PyVarObject * _PyObject_NewVar( PyTypeObject  *type,Py_ssize_t  size) Return value: New reference. PyObject * PyObject_Init( PyObject  *op,PyTypeObject  *type) Return value: Borrowed reference. 使用类型和初始引用初始化一个新分配的对象op

上下文变量对象 注意 在版本3.7.1中更改: 在Python 3.7.1中,所有上下文变量C的签名都是更改使用PyObject指针代替PyContext, PyContextVar,和PyContextToken,例如: // in 3.7.0: PyContext *PyContext_New(void); // in 3.7.1+: PyObject *PyContext_New(void); 有关详细信息,请参阅bpo-34762 . 版本3.7. 本节详细介绍了contextvarsmodule. PyContext C结构用来表示contextvars.Context宾语。 PyC

Coroutine Objects 版本3.5中的新功能 协程对象是用asynckeywordreturn. PyCoroObject 用于协程对象的C结构. PyTypeObject PyCoro_Type 与协程对象对应的类型对​​象. int PyCoro_CheckExact(的PyObject  *ob) 如果ob的类型是PyCoro_Type;ob必须不 NULL. PyObject * PyCoro_New(PyFrameObject  *frame,PyObject  *name,PyObject  *qualname) Return value: New reference.

生成器对象 生成器对象是Python用来实现生成器迭代器的对象。它们通常是通过迭代产生值的函数来创建的,而不是明确地调用PyGen_New()或PyGen_NewWithQualName(). PyGenObject 用于生成器对象的C结构. PyTypeObject PyGen_Type 对应于生成器对象的类型对象. int PyGen_Check( PyObject  *ob) 如果ob是一个发电机对象;ob必须不 NULL. int PyGen_CheckExact(的PyObject  *ob) 如果ob的类型是PyGen_Type;ob必须不 NULL. PyObject * PyG

类型对象   PyTypeObject 用于描述内置类型的对象的C结构. PyObject* PyType_Type 这是类型对象的类型对象;它与Python层中的type是同一个对象. int PyType_Check( PyObject  *o) 如果对象o是一个类型对象,则返回true,包括从中派生的类型的实例标准类型对象。在所有其他情况下返回假. int PyType_CheckExact( PyObject  *o) 如果对象o是一个类型对象,但不是标准类型对象的子类型,则返回true。在所有其他情况下返回false . nsigned int PyType_ClearCa

异常处理 本章描述的函数将允许您处理和提升Pythonexceptions。了解Pythonexception处理的一些基础知识非常重要。它的工作方式有点像POSIX errno变量:发生的最后一个错误有一个全局指标(每个线程)。Most C API函数在成功时不会清除它,但会将其设置为指示失败时的错误。大多数C API函数也返回一个错误指示符,通常是NULL如果它们应该返回一个指针,或-1如果它们返回一个整数(例外:PyArg_*() functionsreturn 1表示成功,0表示失败). 具体来说,错误指示符由三个对象指针组成:exception的类型,异常的值和traceback对象

tokenize– Python源代码 源代码: Lib / tokenize.py tokenizemodule为Python源代码提供了一个词法扫描程序,用Python实现。该模块中的扫描仪可以很好地返回注释,这对于实现“漂亮的打印机”非常有用,包括用于屏幕显示的彩色打印机. 为了简化令牌流处理,所有运营商和分隔符代币和Ellipsis使用通用OP令牌类型。确切的类型可以通过检查exact_type上的财产命名为元组从返回tokenize.tokenize(). 令牌输入 主要入口点是发电机: tokenize.tokenize(readline) tokenize()生成器需

symtable– 访问编译器的符号表 源代码: Lib / symtable.py 符号表由编译器在生成字节码之前从AST生成。符号表负责计算代码中每个标识符的范围。symtable提供了一个界面来检查这些表格. 生成符号表 symtable.symtable(code, filename, compile_type) 返回顶部SymbolTable对于Python源code.filename是包含代码的文件的名称。compile_type是mode compile(). 参数检查符号表 class symtable.SymbolTable 一个块的命名空间表。构造函数不公开.