为什么函数在python中是静态的?

时间:2013-09-11 15:28:21

标签: c++ c

如果我们想使用内部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 );

为什么这些功能是以静态方式实现的?

4 个答案:

答案 0 :(得分:5)

来自docs

  

因此,便携性不需要做任何假设   符号可见性。这意味着扩展模块中的所有符号   应该声明static,除了模块的初始化   功能,以避免与其他扩展模块的名称冲突   (如模块的方法表和初始化部分所述   功能)。它意味着应该可以访问的符号   其他扩展模块必须以不同的方式导出。

答案 1 :(得分:2)

所以你问的是static意味着什么。

这意味着这些函数仅在声明它们的文件中可用,以便不与其他定义冲突并污染名称空间。

这些文件是静态的原因是因为,这些是所有python函数将被映射的,看看它们如何涵盖可能的函数声明的所有排列。这些只能在该文件中创建。

答案 2 :(得分:0)

因此它们仅在定义它们的文件中可用。 不污染全局名称空间。

答案 3 :(得分:0)

C中函数之前的关键字static表示该函数在转换单元外部(大致是包含头文件后的源文件)不可见,其中定义了该函数。它为函数提供了“内部联系”(用C语言表示),因此它对文件是“私有的”。