首页 存档 技术 查看内容

Python 通过 ctypes 调用 C 程序实例

2018-3-30 13:00 |来自: 互联网 350 0

摘要: 在做复杂计算时,Python的执行效率是无法同C比的。而且有些算法已经有开源的C库了,我们也没必要用Python重写一份。那Python怎么调用C语言写的程序库呢?答案就在Python提供的ctypes库,它提供同C语言兼容的数据类型 ...


在做复杂计算时,Python的执行效率是无法同C比的。而且有些算法已经有开源的C库了,我们也没必要用Python重写一份。那Python怎么调用C语言写的程序库呢?答案就在Python提供的ctypes库,它提供同C语言兼容的数据类型,可以很方便地调用C语言动态链接库中的函数。

使用C标准库函数

我们来试试调用C标准库函数:

fromctypesimportcdll

libc=cdll.LoadLibrary('libc.so.6')# Load standard C library on Linux

# libc = cdll.LoadLibrary('libc.dylib')# Load standard C library on Mac

# libc = cdll.msvcrt# Load standard C library on Windows

printlibc.time(None)

上述代码加载了Linux中的C标准库”libc.so.6″,并调用其中”time()”函数,执行后屏幕上会打印出当前时间戳。注,Windows和Mac上的加载方法在注释中。

调用自定义的动态链接库

我们先根据这篇文章(http://www.bjhee.com/java-native-1.html)写个动态链接库,现在你有了库”libhello.so”,其有一个hello函数。让我们在Python中调用它:

fromctypesimportcdll

libhello=cdll.LoadLibrary("./libhello.so")

libhello.hello('You')

看到屏幕上”Hello You!”的字样了吧。对!就这么简单,比起Java调用本地代码方便很多吧。注意,本例中的”libhello.so”同Python程序在同一目录下。

效率对比

我们写个阶乘(factorial)函数,来比较Python和C的执行效率吧。先写C代码:

intfactorial(intn)

{

if(n

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部