利用 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结构体数组。该数组中的每个PyMethodDef结构体描述了一个 C 函数,模块x会将这些 C 函数提供给导入x的 Python 代码使用。每个这样的 C 函数通常有以下两种结构:
static PyObject* func_with_named_arguments(PyObject* self, PyObject* args, PyObject* kwds) { /* 省略:函数体,通过 Python C API 函数 PyArg_ParseTupleAndKeywords 访问参数,返回一个