使用Python的C API扩展Python
1. C编码的Python扩展模块概述
C函数initx通常具有以下整体结构:
void initx(void) { PyObject* thismod = Py_InitModule3("x", x_methods, "docstring for x"); /* 可选:调用 PyModule_AddObject(thismod, "somename", someobj) 以及其他Python C API调用,以完成模块对象thismod及其类型(如果有)和其他对象的准备工作。 */ }x_methods是一个PyMethodDef结构体数组。x_methods数组中的每个PyMethodDef结构体描述了一个C函数,模块x将这些C函数提供给导入x的Python代码使用。每个这样的C函数通常有如下结构:
static PyObject* func_with_named_arguments(PyObject* self, PyObject* args, PyObject* kwds) { /* 省略:函数体,通过Python C API函数PyArg_ParseTupleAndKeywords访问参数,返回PyObje