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.pswp.cn/news/529941.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529941.shtml
英文地址,請注明出處:http://en.pswp.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;…