为什么函数在python中是静态的
Why function is static in python?
如果我们想使用内部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 的说法),因此它对文件是"私有的"。
相关文章:
- 使用转换器提升 Python 问题 - 静态链接
- 你如何决定将C++和/或 python 中的成员函数表示为静态?
- 静态链接 glibc & boost_python36 for Python extension
- 如何使用 pybind11 将 python 函数保存到静态 c++ 容器中?
- Boost.Python 在静态库方面失败
- 静态提升 Python 构建
- 如何在python中使用c ++ .lib(c ++静态库)文件
- 使用 boost python 进行静态链接
- 如何从boost.python使用-fPIC编译静态库
- Python C 接口,不同的模块共享静态变量
- Python / C++绑定,如何再次链接静态C ++库(portaudio)与distutils
- 如何链接 Python 的静态库用于 C 扩展?
- 强制CMake/VisualStudio使用Boost.Python的静态库
- Boost Python def 成员函数,它调用静态函数,其中 self 作为唯一的参数
- 静态 openCL 类未在使用 boost.python 的 python 模块中正确发布
- 为什么函数在python中是静态的
- C++中类似Python的静态数据存储
- 提振.Python静态方法重载
- 在C++中的python类中指定静态变量
- Visual Studio 2010中Python C API的静态链接