〈詳解〉Python3調(diào)用C程序

膠水語(yǔ)言

python為什么要調(diào)用c ?

c與python對(duì)比

python不擅長(zhǎng)"大量運(yùn)算"任務(wù);
python程序優(yōu)勢(shì)在于:編寫(xiě)簡(jiǎn)單,適合"IO密集型作業(yè)"(比如打開(kāi)文件,下載圖片,運(yùn)行腳本).python作為知名的"膠水語(yǔ)言",快速實(shí)現(xiàn)"計(jì)算密集型作業(yè)"的方法就是"把c的代碼拿過(guò)來(lái)直接用"!

python調(diào)用c語(yǔ)言代碼的方式十分簡(jiǎn)單,只需四步:

1.將.c后綴的文件編譯為動(dòng)態(tài)庫(kù)文件(.so結(jié)尾)

格式

  • gcc 原文件名.c -shared -o 新文件名.so

示例

  • 以將c_dll.c編譯為c_dll.so為例
    gcc c_dll.c -shared -o c_dll.so

2.在python文件中導(dǎo)入頭文件

示例

  • from ctypes import *

3.在python中引入c動(dòng)態(tài)庫(kù),并用變量接收動(dòng)態(tài)庫(kù)的引用

格式

  • 變量名 = cdll.LoadLibrary("動(dòng)態(tài)庫(kù)文件路徑")

示例

  • result = cdll.LodaLibrary("./c_dll.so")

4.調(diào)用動(dòng)態(tài)庫(kù)方法

格式

  • 動(dòng)態(tài)庫(kù)引用.庫(kù)函數(shù)(參數(shù))

示例

  • result.my_add(num)

附源碼:

c_add.py


import time
from ctypes import *
def main():
    num = int(input("請(qǐng)輸入整數(shù)值:"))
    result = 0
    start_time = time.time()
    result = cdll.LoadLibrary("./c_dll.so")
    result.my_add(num)

    end_time = time.time()
    print("總共用時(shí)%s"%(end_time-start_time))
    
if __name__ == "__main__":
    main()

c_dll.c

#include<stdio.h>

void my_add(int num){

long int result = 0;

for (long int i=1; i<=num; i++){
    result += i;
}
printf("從1到%d累加的計(jì)算結(jié)果為%ld\n",num,result);
}
最終文件目錄

python_add.py

import time

def main():
    num = int(input("請(qǐng)輸入整數(shù)值:"))
    result = 0
    start_time = time.time()

    for i in range(num+1):
        result += i
    print("從1到%d累加的計(jì)算結(jié)果為%d"%(num,result))
    end_time = time.time()
    print("總共用時(shí)%s"%(end_time-start_time))
    
if __name__ == "__main__":
    main()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜂大,一起剝皮案震驚了整個(gè)濱河市省古,隨后出現(xiàn)的幾起案子鸣个,更是在濱河造成了極大的恐慌,老刑警劉巖糯笙,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡箱靴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)荷愕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)衡怀,“玉大人,你說(shuō)我怎么就攤上這事安疗∨籽睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵荐类,是天一觀的道長(zhǎng)怖现。 經(jīng)常有香客問(wèn)我,道長(zhǎng)玉罐,這世上最難降的妖魔是什么屈嗤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮厌小,結(jié)果婚禮上恢共,老公的妹妹穿的比我還像新娘。我一直安慰自己璧亚,他們只是感情好讨韭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布脂信。 她就那樣靜靜地躺著,像睡著了一般透硝。 火紅的嫁衣襯著肌膚如雪狰闪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天濒生,我揣著相機(jī)與錄音埋泵,去河邊找鬼。 笑死罪治,一個(gè)胖子當(dāng)著我的面吹牛丽声,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播觉义,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼雁社,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了晒骇?” 一聲冷哼從身側(cè)響起霉撵,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洪囤,沒(méi)想到半個(gè)月后徒坡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘤缩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年喇完,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片款咖。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡何暮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铐殃,到底是詐尸還是另有隱情海洼,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布富腊,位于F島的核電站坏逢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赘被。R本人自食惡果不足惜是整,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望民假。 院中可真熱鬧浮入,春花似錦、人聲如沸羊异。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至易迹,卻和暖如春宰衙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睹欲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工供炼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窘疮。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓袋哼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親考余。 傳聞我的和親對(duì)象是個(gè)殘疾皇子先嬉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • python語(yǔ)言調(diào)用c語(yǔ)言進(jìn)行擴(kuò)展,或者增加程序的運(yùn)行速度都是特別方便的楚堤。同時(shí)還能獲得與C或者C++幾乎相同的執(zhí)行...
    Tim在路上閱讀 2,448評(píng)論 0 3
  • 1簡(jiǎn)介 ctypes是一個(gè)自Python 2.5開(kāi)始引入的,Python自帶的函數(shù)庫(kù)含懊。其提供了一系列與C身冬、C++語(yǔ)...
    櫻雨樓閱讀 14,867評(píng)論 8 10
  • 很早就知道Python中可以方便的調(diào)用C程序,但一直沒(méi)有嘗試過(guò)岔乔。今天來(lái)試一試酥筝。環(huán)境ubuntu14.04LTS,P...
    tisgeek閱讀 1,506評(píng)論 0 0
  • 這篇文章想討論一個(gè)什么話題雏门?我們討論一種方法——兼顧編譯語(yǔ)言的性能嘿歌,同時(shí)又能保留動(dòng)態(tài)語(yǔ)言的靈活性。我們想實(shí)現(xiàn)一個(gè)插...
    Benson666閱讀 3,521評(píng)論 1 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月茁影,有人笑有人哭宙帝,有人歡樂(lè)有人憂愁,有人驚喜有人失落募闲,有的覺(jué)得收獲滿滿有...
    陌忘宇閱讀 8,529評(píng)論 28 53