python - 通过 C-API 向模块添加新命令?

标签 python python-c-api

如何通过 C-API 向模块动态添加方法?我有很多需要注册的函数,它们不在同一个数组中。我假设我可以使用 NULL 方法表初始化模块,正如文档所说这是可能的。

PyObject *mymod = Py_InitModule("my", NULL);

一次添加一个方法的函数的名称是什么。

最佳答案

基本上,您必须首先获取模块字典:

d = PyModule_GetDict(m);

将模块名称存储在 PyString 对象中:

n = PyString_FromString("modname");

然后正确填充 PyMethodDef struct ml 并创建一个新的可调用对象:

v = PyCFunction_NewEx(&ml, (PyObject*)NULL, n);

并将此可调用函数添加到模块字典中:

PyDict_SetItemString(d, ml->ml_name, v);

我显然跳过了所有相关的错误检查。

这一切都是我对Py_InitModule4的解释确实如此(Py_InitModule 是一个使用默认参数调用 Py_InitModule4 的宏)。

关于python - 通过 C-API 向模块添加新命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565175/

相关文章:

python - 在 nginx 上使用 Fabric 的 Python Flask Web 应用程序中出现上游超时错误

python - 使 python itertools 在多种条件下工作

python - 使用 C 对象指针构建 PyObject*

python - C-扩展 : Ref count of generators

python - 在 python 的 C 扩展中包含外部共享英特尔的 mkl 库

python - 使用python删除曲线下方的数据点

Python:无法分配给文字

python - 为 QUuid 类制作 GDB 调试助手

python - tensorflow::Tensor 到 python Tensor 或 numpy.nd_array

python - 将 python 嵌入到我的应用程序中时出现内存泄漏