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

Why function is static in python?

本文关键字:静态 python 函数 为什么      更新时间:2023-10-16

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

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

从文档中:

因此,可移植性要求不要对以下方面做出任何假设 符号可见性。这意味着扩展模块中的所有符号 应该声明为static,除了模块的初始化 功能,以避免与其他扩展模块的名称冲突 (如模块的方法表和初始化一节所述 函数)。这意味着应该可以从 其他扩展模块必须以不同的方式导出。

所以你在问static是什么意思。

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

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

因此,

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

在 C 中函数之前关键字 static 表示该函数在定义它的翻译单元(大致上是包含头文件后的源文件)之外不可见。它为函数提供了"内部链接"(用 C 的说法),因此它对文件是"私有的"。