前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python笔记:python调用C库

python笔记:python调用C库

作者头像
超级大猪
发布2019-11-22 14:34:46
1.1K0
发布2019-11-22 14:34:46
举报
文章被收录于专栏:大猪的笔记大猪的笔记

前言

在python中实现算法性能较差,所以在某些瓶颈处,可以把算法用C语言的实现。编译成动态链接库,再让python调用。

示例

下面示例一个算法,冒泡排序。

用C语言实现冒泡排序算法

代码如下(clib.c):

代码语言:javascript
复制
void bubble_sort(int a[],int n)//n为数组a的元素个数
{
    int i;
    int temp;
    for(i=0; i<n-1; i++)
    {
        int j;
        for(j=0; j<n-1-i; j++)
        {
            if(a[j] > a[j+1])
            {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1]=temp;
            }
        }
    }
}

编译C库

可以使用如下的bash脚本(build.sh):

代码语言:javascript
复制
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之间的转换方式。

在本例中,参考代码如下:

代码语言:javascript
复制
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 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 示例
    • 用C语言实现冒泡排序算法
      • 编译C库
        • python调用
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档