当使用Python/C API为Python添加C++扩展时,本地C++函数为什么或者应该被声明为静态吗?
#include <Python.h>
// 将C++函数封装为Python可调用函数
static PyObject* py_addNumbers(PyObject* self, PyObject* args) {
int a, b;
if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
return nullptr;
}
int result = a + b;
return PyLong_FromLong(result);
}
// 扩展模块初始化函数
PyMODINIT_FUNC PyInit_example(void) {
static PyMethodDef ModuleMethods[] = {
{ "addNumbers", py_addNumbers, METH_VARARGS, "Add two numbers" },
{ nullptr, nullptr, 0, nullptr }
};
static PyModuleDef ModuleDef = {
PyModuleDef_HEAD_INIT,
"example",
"Example module",
-1,
ModuleMethods
};
PyObject* module = PyModule_Create(&ModuleDef);
return module;
}
例如,在上面的例子中,py_addNumbers 函数被声明为静态。我在官方文档https://docs.python.org/zh-cn/3/extending/extending.html中看到,使用Python/C++ API时,本地C++函数也被声明为静态。
为什么要这样做,或者可以不这样做吗?原因是什么?
这个问题困扰我好久了,需要一位有相关编程经验的专业人士帮忙解答,谢谢。
下面是官方文档里的一段解释,看了也还是不太明白