在堆上分配对象

在版本 2.5 中进行了更改:此Function为* size *使用了int类型。这可能需要更改您的代码以正确支持 64 位系统。

使用类型和初始引用初始化新分配的对象* op 。返回初始化的对象。如果 type *指示对象参与了循环垃圾检测器,则将其添加到检测器的观察对象集。对象的其他字段不受影响。

PyObject_Init()会执行所有操作,并且还会初始化可变大小对象的长度信息。

在版本 2.5 中进行了更改:此Function为* size *使用了int类型。这可能需要更改您的代码以正确支持 64 位系统。

  • TYPE * PyObject_New(TYPE,PyTypeObject ** type *)
    • 返回值:新参考.

使用 C 结构类型* TYPE 和 Python 类型对象 type *分配一个新的 Python 对象。未由 Python 对象 Headers 定义的字段不会初始化;该对象的引用计数将为 1.内存分配的大小由类型对象的tp_basicsize字段确定。

  • TYPE * PyObject_NewVar(TYPE,PyTypeObject ** type *,Py_ssize_t * size *)
    • 返回值:新参考.

使用 C 结构类型* TYPE 和 Python 类型对象 type 分配一个新的 Python 对象。未由 Python 对象 Headers 定义的字段未初始化。分配的内存允许 TYPE 结构加上 size 字段,该字段的大小由 type *的tp_itemsize字段给出。这对于实现 Tuples 之类的对象很有用,这些对象能够在构造时确定其大小。将字段数组嵌入相同的分配中可以减少分配的数量,从而提高内存 Management 效率。

在版本 2.5 中进行了更改:此Function为* size *使用了int类型。这可能需要更改您的代码以正确支持 64 位系统。

  • 无效PyObject_Del(PyObject ** op *)

    • 释放使用PyObject_New()PyObject_NewVar()分配给对象的内存。通常从对象类型中指定的tp_dealloc处理函数中调用该方法。调用后不应访问该对象的字段,因为内存不再是有效的 Python 对象。
  • PyObject * Py_InitModule(字符 名称PyMethodDef* 方法*)

    • *返回值:借用参考。

根据函数的名称和表创建一个新的模块对象,并返回新的模块对象。

在版本 2.3 中进行了更改:较旧的 Python 版本不支持* NULL 作为 methods *参数的值。

  • PyObject * Py_InitModule3(char *name PyMethodDef methods *,char ** doc *)
    • *返回值:借用参考。

根据函数的名称和表创建一个新的模块对象,并返回新的模块对象。如果* doc 为非 NULL *,它将用于定义模块的 docstring。

在版本 2.3 中进行了更改:较旧的 Python 版本不支持* NULL 作为 methods *参数的值。

  • PyObject * Py_InitModule4(char *name PyMethodDef methods *,char *doc PyObject self *,int * apiver *)
    • *返回值:借用参考。

根据函数的名称和表创建一个新的模块对象,并返回新的模块对象。如果* doc 为非 NULL ,它将用于定义模块的 docstring。如果 self 不为 NULL ,它将作为它们的第一个参数(否则为 NULL )传递给模块的Function。 (这是作为实验性Function添加的,在当前版本的 Python 中没有已知用途.)对于 apiver *,唯一应传递的值由常量PYTHON_API_VERSION定义。

Note

此Function的大多数用法可能应该使用Py_InitModule3()来代替;仅在确定需要时才使用它。

在版本 2.3 中进行了更改:较旧的 Python 版本不支持* NULL 作为 methods *参数的值。

  • PyObject _Py_NoneStruct
    • 在 Python 中显示为None的对象。只能使用Py_None宏访问该宏,该宏的结果为指向该对象的指针。