同时使用 Python 和 C
我们需要什么
代码
Python 和 C 是编程语言中最流行、最伟大的两种语言。许多语言之间可以很容易地互相通信,但 Python 和 C 之间却有点棘手。首先,让我们先来了解一下我们为什么要这样做。
毫无疑问,这两种语言都非常强大,而且非常有用。有时,在 Python 项目中使用 C 语言的原始性能会带来回报,它确实有助于减少响应和处理时间等。
我们需要什么
Python 和 C。就是这样。
代码
在这个例子中,我将使用一个简单的斐波那契函数来演示这一切。
#include <Python.h>
// create the function like you normally would in C
int CFib(int n){
if(n < 2)
return n;
else return CFib(n - 1) + CFib(n - 2)
}
// this function will be binding our python version and our C version together
// will only take one and only one non-keyword arguement
static PyObject* fib(PyObject* self, PyObject* args) {
int n;
if(!PyArg_ParseTuple(args, "i", &n))
return NULL;
return Py_BuildValue("i", CFib(n))
}
在代码中我们可以看到我们需要Python.h
头文件,它包含了所有相关的方法、函数、属性等等,以便两种语言能够协同工作。我们首先用 C 语言正常创建函数,然后使用 Python 头文件中的方法再次创建它,但需要添加一些参数。
如你所见,我们在函数内部使用了构建器和解析器。它们在两种语言之间进行通信,从而用 C 语言创建该函数的 Python 版本。
此外,我们需要一个用 Python 编写的小型安装脚本
from distutils.core import setup, Extension
setup(name='ModuleName', version='1.0', ext_modules=[Extension('ModuleName', ['Fib.c'])])
大部分内容不言自明。我们从 Python 3+ 内置的库导入,该库允许我们运行安装和扩展脚本,它们都与 C 和 Python 头文件兼容。
为了运行它并将其保存为我们自己的项目,我们需要运行这两个命令,python setup.py build
python setup.py install
这样您就可以从任何其他 python 项目调用您的模块。
现在到了最后的压轴戏
import ModuleName # really should've chosen a better name
ModuleName.CFib(2)
打印出 1
如果你想 fork 它,可以点击我的 GitHub 来获取
!此外,这是一个非常基础的版本,你可以在Python 教程网站
上学习更深入的学习方法。
有任何错误或建议请随时告诉我<3
文章来源:https://dev.to/rapidnerd/using-python-and-c-together-d4e