📜  如何在Python中调用C函数

📅  最后修改于: 2020-05-04 12:30:57             🧑  作者: Mango

您是否曾经遇到过必须使用Python调用C函数的情况?本文将在非常基本的层面上为您提供帮助,如果您还没有遇到过这种情况,您将很高兴知道如何实现。
首先,让我们使用C编写一个简单的函数,并生成文件的共享库。假设文件名为function.c。

int myFunction(int num)
{
    if (num == 0)
        // 如果number为0,则不执行任何操作.
        return 0;
    else
        // 如果数字是2的幂,则返回1,否则返回0
    num & (num - 1) == 0 ? return 1 : return 0
}

编译:

cc -fPIC -shared -o libfun.so function.c

使用ctypes(外部函数接口)库从Python调用C函数

上面的语句将生成一个名为libfun.so的共享库。现在,让我们看看如何在Python中使用它。在Python中,我们有一个称为ctypes的库。使用这个库,我们可以在Python中使用C函数。
假设文件名为function.py。

import ctypes
NUM = 16
# 使用fun.myFunction()将libfun加载到Python文件中,可以访问C函数,但是参数类型是问题。
fun = ctype.CDLL(libfun.so)
# 现在无论何时将参数传递给函数类型,都将对其进行检查.
fun.myFunction.argtypes(ctypes.c_int)
# 现在我们可以使用即时(fun)返回值调用此函数。Value是用C代码编写的函数返回的值
returnVale = fun.myFunction(NUM)