Python专业
Python 调用 C
Python 的底层是 C 写的(实际上大部分高级编程语言都是 C 写的)因此Python可以调用以下C/C++文件类型:
- C源代码文件(.c)
- C++源代码文件(.cpp、.cxx、.cc)
- 编译后的共享库(Linux/Unix的.so、Windows的.dll、macOS的.dylib)
- 编译后的静态库(Linux/Unix的.a、Windows的.lib)
因此互相调用的逻辑主要是:数据类型转换、编译库的链接、接收返回值。
在 Python 中调用 C(原生的 Python.h)
python+c/c++混合编程如:
原生的 Python.h
cython
pybind11:pytorch 也采用该方法
ctypes、cffi、SWIG、Boost.Pytho 等
但不论是哪个方法 ,大致的流程都是:转换数据类型->编译代码->生成编译后的文件(.pyd .pyc .pyo .so .dll 等)
冷知识:
python的import不止能导入.py后缀结尾的文件
pyc是由py文件经过编译后生成的二进制文件,py文件变成pyc文件后,加载的速度有所提高,并且可以实现源码隐藏。
pyo是优化编译后的程序,也可以提高加载速度,针对嵌入式系统,把需要的模块编译成pyo文件可以减少容量。
.so和.dll分别是Linux和window的动态库
这些都可以被import导入,所以我们只需要编译C代码,然后import导入即可。