python是由c语言编写的么,在python中使用c语言编写的库

本文使用的 cffi 官网网址:https://cffi.readthedocs.io/en/latest/overview.html

cffi 自己本身使用了pycparser 这个库,是用python编写的c语言parser库,官网地址: https://github.com/eliben/pycparser

python被称为是“胶水语言”,号称能够“方便地”调用其他语言,比如c。但是实际操作中,对于非码农出身的人来说写语言接口还是很痛苦的事情。(我就从来没有试图去写过ctype或者swig之类的高级货,一眼看去完全被吓到。)最近发现了一个python模块,“C Foreign Function Interface for Python”(cffi),它把很多低层次的接口都隐藏起来,用户从而不需要写那些让人抓狂的接口文件也能非常方便的调用C语言了。(另外一种方便调用C语言的办法是使用Cython],我有时间会在另一篇文章介绍。)

假设我有一个写好的C语言函数,定义在GSL(GNU Scientific Library)里面的Bessel函数。

// foo.c

#include

double foo(double a, double b){

return gsl_sf_bessel_J0(a + b);

}

接下来,我们想在python中用cffi模块调用这个用C语言定义的函数foo的“签名”,即输入和输出的数据类型。

# demo_1.py

from cffi import FFI

ffi = FFI()

ffi.cdef("double foo(double, double);")

下一步,我们要把函数foo.c这个源文件直接传递python 2. 把

# demo_1.py (cont.)

import os

file_dir = os.path.abspath('.')

lib = ffi.verify("#include ", include_dirs=[file_dir], libraries=['gsl', 'gslcblas'])

foo的定义的。它的用法是,用一个string直接告诉python,我要载入foo定义的C语言源文件。参数foo.c所在的位置。因为我把foo.c放在了同一个文件家里,所以我可以用foo.c的文件夹地址。最后,参数foo调用了GSL库里面的Bessel函数。 这样就搞定了,我们可以在python中直接调用C语言定义的函数

# demo_1.py (cont.)

a, b = 1.2, 3.4

print lib.foo(a, b)

之前说到第二种传递函数foo和其他用到的库文件比如GSL“打包”成一个新的库文件,比如叫libfoo.so而无需再指定其他库文件了。具体方法如下:

注意在这一步中我们把gsl和gslclbas这两个库文件“打包”进了libfoo.so了。

# demo_2.py

from cffi import FFI

ffi = FFI()

ffi.cdef("double foo(double, double);")

import os

file_dir = os.path.abspath('.')

lib = ffi.verify("#include ", include_dirs=[dir], library_dirs=[dir], libraries=['foo'])

a, b = 1.2, 3.4

print lib.foo(a, b)

注意观察library_dirs用来说明库文件libfoo.so经常不在系统默认的gsl等库文件确实一般安装在libraray_dirs这个参数来指明)。 2. 参数[foo],而不是gsl和libfoo.so里面。

最后,假如函数foo.h来包含

// foo.h

#ifndef foo_h__

#define foo_h__

double foo(double, double);

#endif

然后把该头文件传递过去就可以了,即

, include_dirs=[dir], library_dirs=[dir], libraries=['foo'])

配置CFFI接口,参考https://cffi.readthedocs.org/en/latest/installation.html

(转)python中调用R语言通过rpy2 进行交互安装配置详解

python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753   python中调用R语言通过r ...

如何在python中调用C语言代码

1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写的函数-ctypes,SWIG,Python/ ...

Python中调用c语言(简单版)

Python中有时需要调用c程序中的函数.使用ctype库可以很方便地调用c语言.现说明方法,以及注意事项. c程序编译为.so文件: 我们需要的c语言文件为test.c,要从其中调用func(x,y ...

Python 中如何自动导入缺失的库?

在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module named 'xxx'或者ModuleNotFoundError: No modul ...

python中调用C++写的动态库

一.环境:Windows XP + Python3.2 1. dll对应的源文件(m.cpp): #include extern "C" { _de ...

VS2017中使用C++语言编写delay函数实现延迟

秒级别的延时 //定义函数 void delay(int sec){ time_t start_time, cur_time; // 变量声明 time(&start_time); do { ...

通过编写聊天程序来熟悉python中多线程及socket的用法

1.引言 Python中提供了丰富的开源库,方便开发者快速就搭建好自己所需要的应用程序.本文通过编写基于tcp/ip协议的通信程序来熟悉python中socket以及多线程的使用. 2.python中 ...

python中类似三元表达式的写法

python中没有其它语言中的三元表达式,如: a = x > y ? m : n; python中的类似写法为: a = 1 b = 2 h = "" h = " ...

python中实现三目运算

python中没有其他语言中的三元表达式,不过有类似的实现方法 如: a = 1 b =2 k = 3 if a>b else 4 上面的代码就是python中实现三目运算的一个小demo, 如 ...

随机推荐

SharePoint 2013 Designer系列之数据视图

在SharePoint使用中,数据展示是一块很重要的部分,很多时候我们会采用webpart的形式,但是有一些情况,我们不必使用开发,仅需使用Designer即可,下面让我简单介绍下数据视图的使用. 1 ...

AngularJS向指令传递数据

我今天要实现的功能是利用AngularJS来完成客户端过滤器. list.html页面主要代码如下: ......

NameValueCollection类

最近在研究HttpRequest类,发现里面的很多属性都返回一个NameValueCollection对象,今天再来了解一下这个神秘的对象. 随便写了个例子,发现跟HashTable类似.但是这个东西 ...

Leaflet学习笔记-基础内容

为什么选择Leaflet 开源,且代码仅有 31 KB,但它具有开发人员开发在线地图的大部分功能(80%的功能) 是不是比arcgis要小很多呢 官网:http://leafletjs.com/ 劣势 ...

Java将一个目录下的所有数据复制到另一个目录下

/* 将"C:\\JavaProducts\\Source"下的所有数据复制到"C:\\Target"下 */ import java.io.*; public ...

Mqtt服务器搭建

.bg { background: #99CC99 } Mqtt服务器搭建 测试环境:CentOS64位 1.安装基础软件 yum install gcc-c++ yum install cmake ...

SPOJ GSS(Can you answer the Queries)系列 7/8

GSS1 线段树最大子段和裸题,不带修改,注意pushup. 然而并不会猫树之类的东西 #include #define MAXN 50001 using n ...

Maven项目中添加JDBC驱动

在pom.xml配置文件中添加: mysqlmysql-con ...

ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory Type and Attributes

1.前言 2. Memory类型和属性 memory分为normal memory和device memory,两种类型的Memory有各自的属性,除了下面介绍的几种属性外,还有其他一些杂项属性 2. ...

Musle比对软件

下载地址:http://www.drive5.com/muscle/downloads.htm 1)运行: win+R然后输入cmd,然后cd进入muscle目录 2) 比对: muscle3.8.3 ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言小明今年16岁,C语言1.爷爷对小明说:我现在的年龄是你的7倍,过几年是你的6倍,再过若干年就分别是你的5倍,4倍,3倍,2倍.你知道爷爷和小明现在的年龄吗?...

满意答案ta_meng2013.06.15采纳率&#xff1a;49% 等级&#xff1a;12已帮助&#xff1a;5126人#include void main(){int i,j,k;int t60,t50,t40,t30,t20; //用于标记是否达到过这些要求&#xff0c;C语言貌似没有bool类型吧for (i21;i<200;i7) //爷爷的年龄为i{ji/7;…

android 控件坐标转换,Android自定义动画根据控件Y轴旋转动画(仿红包)

这里给正在学安卓的小白们分享一个动画吧&#xff0c;用处挺多&#xff0c;代码也不多&#xff0c;还望各位大佬不要打击。进入正题&#xff0c;先看看效果效果很炫酷很美好好了 来看代码吧 该说的都在代码注释里面 这个不用多说 代码极其简单//自定义一个类继承Animation(…

android datepicker 自定义,android – 如何使用两个datepicker创建自定义对话框?

最好先阅读Dialogs和Pickers.至于实现,您可以有两个按钮&#xff1a;一个用于显示开始日期的日期选择器,另一个用于显示结束日期.编辑&#xff1a;如果你真的想在1个对话框中显示2个日期选择器,这里有一个如何做的例子.首先,创建自定义XML布局./res/layout/custom_date_picker.…

Android usb 权限广播,android10.0 USB弹窗权限流程解析

USB请求权限流程1. 新建activity&#xff0c;获取UsbManager usbManager (UsbManager) getSystemService(Context.USB_SERVICE)2. 获取所以的USB设备HashMap map usbManager.getDeviceList()3. 过滤别的USB设备&#xff0c;拿到自己USB的USBDevice类&#xff0c;然后请求USB权…

RN做的Android应用反编译,macOS Catalina配置Android反编译三件套 apktool/dex2jar/enjarify/jd-gui...

创建目录$ cd ~$ mkdir Android$ cd Android12345$cd~$mkdirAndroid$cdAndroid下载安装配置dex2jar$ wget https://github.com/pxb1988/dex2jar/files/1867564/dex-tools-2.1-SNAPSHOT.zip// 本站 wget https://www.mobibrw.com/wp-content/uploads/2020/07/dex-tools-2.1-SNAP…

android手势监听功能吗,Android手势监听 OnGestureListener (短按,长按,慢滑动,快滑动)...

/*** 以下方法中的参数解释&#xff1a;* e1&#xff1a;第1个是 ACTION_DOWN MotionEvent 按下的动作* e2&#xff1a;后一个是ACTION_UP MotionEvent 抬起的动作(这里要看下备注5的解释)* velocityX&#xff1a;X轴上的移动速度&#xff0c;像素/秒* velocityY&#xff1a;Y轴…

android 仿网易标题栏,仿网易新闻可滑动标题栏TabLayout(文字或图标)

近期有需要&#xff0c;要做一个类似于网易新闻首页中的可滑动标题栏 TabLayout&#xff0c;根据大神写的 FlycoTabLayout 改造了一下&#xff0c;可以加载网络图片&#xff0c;主要实现内容如下&#xff1a;1. 可配置标题选中效果(下划线/上三角/圆角矩形或椭圆)&#xff1b;2…

android 多态如何组件化,Android组件化之子模块之间通信方案

1 背景Android开发中你的模块(Module)一般只有一个app主模块&#xff0c;随着功能不断扩展你会发现一个模块的缺点就是各种业务高度耦合&#xff0c;你就想测试登录模块&#xff0c;那么你可能会把支付模块也编译进去了&#xff0c;代价就是编译耗时&#xff0c;降低效率。大牛…

unity android sd卡路径,一、文件与路径——2、unity路径特点写法和文件读写全攻略...

1、Unity中各路径和目录的对应关系image.png其中&#xff0c;安卓中的路径是有两种分支的image.png在打包面板中&#xff0c;有个Write Access当我们选择Internal Only就是表示沙盒路径&#xff0c;/data/data/com.xxx.xxx/对应的Android方法为 getFilesDir()当我们选择SDCard时…

html 图片行内剧中,HTML入门(转义字符、行内样式和块级元素、定位、锚点、跑马灯标签、图片标签、表格标签的讲解)...

一、转义字符由特殊字符包裹的文本 会当做标签去解析对应不换行空格对应全角空格 em是字体排印学的计量单位&#xff0c;相当于当前指定的点数。其占据的宽度正好是1个中文宽度&#xff0c;而且基本上不受字体影响。<对应<>对应>二、行内元素和块级元素1.块级标签默…

html scale方法的作用,HTML Canvas scale() 方法

实例绘制矩形&#xff0c;放大到 200%&#xff0c;然后再次绘制矩形&#xff1a;YourbrowserdoesnotsupporttheHTML5canvastag.JavaScript&#xff1a;var cdocument.getElementById("myCanvas");var ctxc.getContext("2d");ctx.strokeRect(5,5,25,15);ctx…

html屏幕输出笔记本,笔记本怎样外接显示器 笔记本外接显示器方法【详解】

摘要&#xff1a;笔记本电脑怎样外接显示器?一些用户用惯了大屏台式电脑的朋友&#xff0c;改用笔记本玩游戏&#xff0c;看电影等开始会很不习惯&#xff0c;由于笔记本的屏幕与键盘相比台式机要小上一大截。如果身边有显示器或者液晶电视的话&#xff0c;不妨动手体验下笔记…

江陵中学2021高考成绩查询,2021高考序幕拉开 荆州38080名考生赴考

十年寒窗磨一剑&#xff0c;只待今朝问鼎时&#xff0c;6月7日上午&#xff0c;2021年全国高考正式拉开序幕&#xff0c;荆州3.8万余名考生迎来人生大考。上午8点&#xff0c;在湖北省沙市中学考点周围&#xff0c;不少身着红色送考服的班主任们正在给考生们发放准考证&#xf…

html怎么播放下一首,javascript – HTML5音频播放列表 – 第一个结束后如何播放第二个音频文件?...

这是一个JSLinted,不引人注目的Javascript示例,演示如何处理和使用结束的mediaevent.在您的特定情况下,您将触发在您的结束事件处理程序中播放第二个音频文件.单击播放列表中的项目开始播放.一个音频结束后,下一个音频开始.标记&#xff1a;(注意,有意避免< li>元素之间的…

排球制作html,MAYA打造排球建模教程

这篇教程向悠悠之家的朋友们介绍用MAYA打造排球模型的过程&#xff0c;制作很简单&#xff0c;希望对刚学习MAYA建模的朋友们有所帮助&#xff0c;我们先看看最终的效果图&#xff1a;你们一定学过很多创建一个球的技巧&#xff0c;但在这个入门教学里面&#xff0c;我们将要学…

北大计算机系统结构学硕,转自包云刚,希望的原野 最近几个月参加了计算所、北大、上海交大多位计算机系统结构硕士与博士的答辩,说几点体会: ① 高水平国际论文越来越多。简单... - 雪球...

来源&#xff1a;雪球App&#xff0c;作者&#xff1a; 逍遥剑99&#xff0c;(https://xueqiu.com/1732900127/153778925)最近几个月参加了计算所、北大、上海交大多位计算机系统结构硕士与博士的答辩&#xff0c;说几点体会&#xff1a;① 高水平国际论文越来越多。简单统计了…

计算机主机箱前后都有什么,目前四种热门的主机机箱设计都有哪些优缺点?

在DIY里面机箱算是最没技术含量的产品之一&#xff0c;不过它却是与DIYer接触时间最长的东西。气味大师每天都会按下机箱开机键&#xff0c;也会空余时间瞄上几眼。机箱确实是对DIY影响最大的产品之一&#xff0c;今天我来盘点一下2018年见过的几个主流机箱设计方案。说是机箱设…

微型计算机硬盘接口主要分为,北京交通大学微机原理与接口技术_期末复习题_图文...

北京交通大学微机原理与接口技术_期末复习题_图文更新时间&#xff1a;2017/1/26 18:34:00 浏览量&#xff1a;1285 手机版“微机原理与接口技术”2008年期末考试复习题1. 微机系统的硬件由哪几部分组成&#xff1f;答&#xff1a;三部分&#xff1a;微型计算机(微处理器&…

计算机自然语言的中国科学家,中科院教授王斌加入小米 任自然语言处理首席科学家...

王斌新浪科技讯 8月28日上午消息&#xff0c;小米新经济研究中心发布微信文章称&#xff0c;中国科学院信息工程研究所研究员、博士生导师王斌已于8月20日正式加入小米集团&#xff0c;任AI实验室自然语言处理(Natural Language Processing&#xff0c;NLP)首席科学家&#xff…

springcloud 相同服务名_浅谈分布式与微服务

分布式和微服务是什么关系&#xff1f;简单来说&#xff0c;分布式和微服务的概念比较相似&#xff0c;分布式属于微服务。但是分布式和微服务在架构、作用和粒度上有所区别。因此&#xff0c;两者的关系是既相互联系又相互区别。本文主要带大家认识分布式和微服务&#xff0c;…