Python扩展与嵌入全解析
1. Python C API扩展基础
在Python中使用C API进行扩展时,有一些关键概念需要了解。首先,循环垃圾回收和弱引用支持属于高级主题,暂不详细讨论。
在类型定义方面,tp_doc字段是一个以空字符结尾的字符串,作为类型的文档字符串。还有其他字段指向结构体,这些结构体的字段又指向函数。你可以将这些字段设置为NULL,表示不支持该类型的任何函数。相关字段如下:
-tp_as_number:通常由数字类型提供特殊方法。
-tp_as_sequence:通常由序列类型提供特殊方法。
-tp_as_mapping:通常由映射类型提供特殊方法。
-tp_as_buffer:用于缓冲区协议的特殊方法。
以字典为例,虽然字典不是序列,但它支持__contains__特殊方法,因此PyDict_Type的tp_as_sequence字段不为NULL,不过除了sq_contains字段外,*(PyDict_Type.tp_as_sequence)中的其他字段都为NULL。
下面通过一个完整的Python扩展模块示例,定义一个简单类型intpair