如果我们想使用内部Python API将C / C ++集成到python中。然后功能的签名采用以下形式
static PyObject *MyFunction( PyObject *self, PyObject *args );
static PyObject *MyFunctionWithKeywords(PyObject *self,
PyObject *args,
PyObject *kw);
static PyObject *MyFunctionWithNoArgs( PyObject *self );
为什么这些功能是以静态方式实现的?
答案 0 :(得分:5)
来自docs:
因此,便携性不需要做任何假设 符号可见性。这意味着扩展模块中的所有符号 应该声明
static
,除了模块的初始化 功能,以避免与其他扩展模块的名称冲突 (如模块的方法表和初始化部分所述 功能)。它意味着应该可以访问的符号 其他扩展模块必须以不同的方式导出。
答案 1 :(得分:2)
所以你问的是static
意味着什么。
这意味着这些函数仅在声明它们的文件中可用,以便不与其他定义冲突并污染名称空间。
这些文件是静态的原因是因为,这些是所有python函数将被映射的,看看它们如何涵盖可能的函数声明的所有排列。这些只能在该文件中创建。
答案 2 :(得分:0)
因此它们仅在定义它们的文件中可用。 不污染全局名称空间。
答案 3 :(得分:0)
C中函数之前的关键字static
表示该函数在转换单元外部(大致是包含头文件后的源文件)不可见,其中定义了该函数。它为函数提供了“内部联系”(用C语言表示),因此它对文件是“私有的”。