Python调用C库

Python可以利用ctypes库很方便地调用C的库函数。 C库例程:

# file: a.c
int sum(int a, int b){
  int t = 0;
  int i = 0;
  for(; i < b;i++) t += a;
  return t;
}
shell> gcc -fPIC -g -c -Wall a.c && gcc -shared -Wl,-soname,liba.so -o liba.so a.o

  Python程序例程:

# file: a.py
import timeit
n=1000000
def s(a,b):
  t = 0
  for i in xrange(b):
    t += a
  return t
print s(10,100)
t = timeit.Timer("s(10,20)", "from __main__ import s")
print t.timeit(n)
del s
import ctypes
a = ctypes.cdll.LoadLibrary("./liba.so")
s = a.sum
print s(10,100)
t = timeit.Timer("s(10,20)", "from __main__ import s")
print t.timeit(n)

  运行比较:

shell> python2.6 a.py
1000
1.94600701332
1000
0.611714839935

Python调用C库的更多相关文章

  1. 使用python调用zxing库生成二维码图片

    (1)     安装Jpype 用python调用jar包须要安装jpype扩展,在Ubuntu上能够直接使用apt-get安装jpype扩展 $ sudo apt-get install pytho ...

  2. 一个简单的C共享库的创建及Python调用此库的方法

    /********************************************************************* * Author  : Samson * Date    ...

  3. python调用Opencv库和dlib库

    python是一门胶水语言,可以调用C++编译好的dll库 python调用opencv-imggui.dll文件 https://www.cnblogs.com/zhangxian/articles ...

  4. 使用Python调用动态库

    我个人在日常使用电脑时,经常需要使用Google,于是就要切换代理,基本上是一会儿切换为代理,一会儿切换成直连,老是打开internet 选项去设置,很不方便,于是我萌生了一个想法: 做一个开关,我想 ...

  5. python调用opencv库教程

    OpenCV安装pip install --upgrade setuptoolspip install numpy Matplotlibpip install opencv-python OpenCV ...

  6. python 调用第三方库压缩png或者转换成webp

    因为工作需要去研究了下png的压缩,发现转换成webp可以小很多,但是webp在手机上的解码速度比png的解码速度慢很多.出于进几年手机设备的处理器的性能也不错了,所以准备两套方案. 在网上搜索了一些 ...

  7. [Python] Python 调用 C 共享库

    Linux/Unix 平台下共享库(Shared Library)文件后缀 .so:在 Windows 平台称为动态链接库(Dynamic Link Library),文件名后缀为 .dll. 利用 ...

  8. Python调用C++

    /***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include <stdio.h> #include <stdlib.h> ...

  9. python调用C函数

    python 与 c可以相互调用,在做后台服务时底层服务用C/C++编写,通过python调用C库可以极大的提高开发效率. 下面对几种调用方式举例说明 1 python通过指针传递浮点型数组给C函数 ...

随机推荐

  1. 去掉word2007回车后自动编号

    1. 在使用word自动编号时,回车续写上一编号内容可能会行距很宽,这时候使用shift+回车不会自动下一编号,而且是正常行距 取消回车自动编号: 打开Word文档,单击菜单栏上的[格式]→[自动套用 ...

  2. C++创建对象的三种方式

    C++在创建对象的时候,有三种方式: #include <iostream> using namespace std; class A { private: int n; public: ...

  3. eclipse没有New Java Class的解决办法

    配置之前的截图: 配置步骤:

  4. Yii2 国际化的问题 zh-CN

    代码增加位置: 在项目文件目录的config->main.php 的 return 内增加以下内容,并在项目目录中新建messages 内设置 en-US 和zh-CN 文件夹.zh-CN文件夹 ...

  5. VM VirtualBox安装Centos6.5

    · · 参考资料:http://www.jb51.net/os/239738.html 如果安装图形界面,内存分配要大于628M 和下图安装选项无关,1.2都可以 界面说明: Install or u ...

  6. 我的Python成长之路---第八天---Python基础(25)---2016年3月5日(晴)

    多进程 multiprocessing模块 multiprocessing模块提供了一个Process类来代表一个进程对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  7. 一些安全相关的HTTP响应头

    转:http://www.2cto.com/Article/201307/230740.html 现代浏览器提供了一些安全相关的响应头,使用这些响应头一般只需要修改服务器配置即可,不需要修改程序代码, ...

  8. Android外部存储 - 官方文档解读

    预备知识:External Storage Technical Information 摘要: "The WRITE_EXTERNAL_STORAGE permission must onl ...

  9. ADS2008 安装方法详解及文件下载

    一.我的安装的过程及方法 正常安装的方法: 1.- Install the program. 2.- Copy "license.lic" into "C:\ADS200 ...

  10. iOS开发中NSDate时间戳的转换--

    NSTimeInterval time =(NSTimeInterval )[model.day floatValue]; NSDate *date = [NSDate dateWithTimeInt ...