python笔记:python调用C库 ##前言 在python中实现算法性能较差,所以在某些瓶颈处,可以把算法用C语言的实现。编译成动态链接库,再让python调用。 ##示例 下面示例一个算法,冒泡排序。 ###用C语言实现冒泡排序算法 代码如下(clib.c): ```c void bubble_sort(int a[],int n)//n为数组a的元素个数 { int i; int temp; for(i=0; i a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1]=temp; } } } } ``` ###编译C库 可以使用如下的bash脚本(build.sh): ```bash rm c_lib.o c_lib.so gcc -c -fPIC c_lib.c gcc -shared c_lib.o -o c_lib.so ``` 编译完成后,在当前目录可以发现`c_lib.so`文件。 ###python调用 在python中,使用ctypes来打通C与python的类型界限。特别注意list在python和C之间的转换方式。 在本例中,参考代码如下: ```python import ctypes import random import time lib_c = ctypes.cdll.LoadLibrary("./c_lib.so") data = [random.randint(1,9000) for x in range(1000)] start = time.time() c_arr = (ctypes.c_int * len(data))(*data) lib_c.bubble_sort(c_arr, len(data)) result = [x for x in c_arr] print("cost time", time.time() - start) ``` 运行时间比用纯python实现大大降低。 ps:这只是个例子,想用python排序,直接用sort()接口就行。 来自 大脸猪 写于 2017-01-12 13:10 -- 更新于2020-10-19 13:06 -- 0 条评论