最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python調(diào)用C語(yǔ)言的方法【基于ctypes模塊】

 更新時(shí)間:2018年01月22日 09:40:45   作者:Lovephysics  
這篇文章主要介紹了Python調(diào)用C語(yǔ)言的方法,涉及Python基于ctypes模塊調(diào)用C語(yǔ)言編譯后的動(dòng)態(tài)鏈接庫(kù)文件相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python調(diào)用C語(yǔ)言的方法。分享給大家供大家參考,具體如下:

Python中的ctypes模塊可能是Python調(diào)用C方法中最簡(jiǎn)單的一種。ctypes模塊提供了和C語(yǔ)言兼容的數(shù)據(jù)類型和函數(shù)來(lái)加載dll文件,因此在調(diào)用時(shí)不需對(duì)源文件做任何的修改。也正是如此奠定了這種方法的簡(jiǎn)單性。

示例如下

實(shí)現(xiàn)兩數(shù)求和的C代碼,保存為add.c

//sample C file to add 2 numbers - int and floats
#include <stdio.h>
int add_int(int, int);
float add_float(float, float);
int add_int(int num1, int num2){
  return num1 + num2;
}
float add_float(float num1, float num2){
  return num1 + num2;
}

接下來(lái)將C文件編譯為.so文件(windows下為DLL)。下面操作會(huì)生成adder.so文件

#For Linux
$ gcc -shared -Wl,-soname,adder -o adder.so -fPIC add.c
#For Mac
$ gcc -shared -Wl,-install_name,adder.so -o adder.so -fPIC add.c
#For windows
$
gcc -shared -Wl,-soname,adder -o adder.dll -fPIC add.c

現(xiàn)在在你的Python代碼中來(lái)調(diào)用它

from ctypes import *
#load the shared object file
adder = CDLL('./adder.so')
#Find sum of integers
res_int = adder.add_int(4,5)
print "Sum of 4 and 5 = " + str(res_int)
#Find sum of floats
a = c_float(5.5)
b = c_float(4.1)
add_float = adder.add_float
add_float.restype = c_float
print "Sum of 5.5 and 4.1 = ", str(add_float(a, b))

輸出如下

Sum of 4 and 5 = 9
Sum of 5.5 and 4.1 = 9.60000038147

在這個(gè)例子中,C文件是自解釋的,它包含兩個(gè)函數(shù),分別實(shí)現(xiàn)了整形求和和浮點(diǎn)型求和。

在Python文件中,一開(kāi)始先導(dǎo)入ctypes模塊,然后使用CDLL函數(shù)來(lái)加載我們創(chuàng)建的庫(kù)文件。這樣我們就可以通過(guò)變量adder來(lái)使用C類庫(kù)中的函數(shù)了。當(dāng)adder.add_int()被調(diào)用時(shí),內(nèi)部將發(fā)起一個(gè)對(duì)C函數(shù)add_int的調(diào)用。ctypes接口允許我們?cè)谡{(diào)用C函數(shù)時(shí)使用原生Python中默認(rèn)的字符串型和整型。

而對(duì)于其他類似布爾型和浮點(diǎn)型這樣的類型,必須要使用正確的ctype類型才可以。如向adder.add_float()函數(shù)傳參時(shí), 我們要先將Python中的十進(jìn)制值轉(zhuǎn)化為c_float類型,然后才能傳送給C函數(shù)。這種方法雖然簡(jiǎn)單,清晰,但是卻很受限。例如,并不能在C中對(duì)對(duì)象進(jìn)行操作。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python進(jìn)程與線程操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python基礎(chǔ)練習(xí)之幾個(gè)簡(jiǎn)單的游戲

    python基礎(chǔ)練習(xí)之幾個(gè)簡(jiǎn)單的游戲

    這篇文章主要介紹了python基礎(chǔ)練習(xí)之幾個(gè)簡(jiǎn)單的游戲,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Python中Iterator迭代器的使用雜談

    Python中Iterator迭代器的使用雜談

    Python中的迭代器意義不僅是在iter函數(shù)上的運(yùn)用,更是一種處理可迭代對(duì)象的迭代器模式,這里我們來(lái)簡(jiǎn)單聊聊Python中Iterator迭代器的使用雜談:
    2016-06-06
  • python中 _、__、__xx__()區(qū)別及使用場(chǎng)景

    python中 _、__、__xx__()區(qū)別及使用場(chǎng)景

    這篇文章主要介紹了python中 _、__、__xx__() 區(qū)別及使用場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python中pytest命令行實(shí)現(xiàn)環(huán)境切換

    Python中pytest命令行實(shí)現(xiàn)環(huán)境切換

    在自動(dòng)化測(cè)試過(guò)程中經(jīng)常需要在不同的環(huán)境下進(jìn)行測(cè)試驗(yàn)證,所以寫自動(dòng)化測(cè)試代碼時(shí)需要考慮不同環(huán)境切換的情況,本文主要介紹了Python中pytest命令行實(shí)現(xiàn)環(huán)境切換,感興趣的可以了解一下
    2023-07-07
  • python3實(shí)現(xiàn)暴力窮舉博客園密碼

    python3實(shí)現(xiàn)暴力窮舉博客園密碼

    這篇文章主要介紹了python3實(shí)現(xiàn)暴力窮舉博客園密碼的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • 深入解讀Python解析XML的幾種方式

    深入解讀Python解析XML的幾種方式

    這篇文章主要為大家詳細(xì)介紹了深入解讀Python解析XML的幾種方式,以ElementTree模塊為例,演示具體使用方法和場(chǎng)景,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 一文帶你掌握python中*星號(hào)的用法

    一文帶你掌握python中*星號(hào)的用法

    Python中的?*號(hào)是一個(gè)特殊的符號(hào),在其他編程語(yǔ)言中,它最廣為人知的用途就是作為乘法運(yùn)算的符號(hào),而在Python中,它的用途遠(yuǎn)不止如此,下面我們就來(lái)學(xué)習(xí)一下它的具體用法吧
    2023-10-10
  • python BlockingScheduler定時(shí)任務(wù)及其他方式的實(shí)現(xiàn)

    python BlockingScheduler定時(shí)任務(wù)及其他方式的實(shí)現(xiàn)

    這篇文章主要介紹了python BlockingScheduler定時(shí)任務(wù)及其他方式的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • django學(xué)習(xí)之a(chǎn)jax post傳參的2種格式實(shí)例

    django學(xué)習(xí)之a(chǎn)jax post傳參的2種格式實(shí)例

    AJAX除了異步的特點(diǎn)外,還有一個(gè)就是:瀏覽器頁(yè)面局部刷新,下面這篇文章主要給大家介紹了關(guān)于django學(xué)習(xí)之a(chǎn)jax post傳參的2種格式的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • Python入門教程(七)Python數(shù)字類型

    Python入門教程(七)Python數(shù)字類型

    這篇文章主要介紹了Python入門教程(七)Python數(shù)字類型,Python是一門非常強(qiáng)大好用的語(yǔ)言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

惠安县| 铁力市| 扎囊县| 松江区| 九寨沟县| 永川市| 普洱| 嘉禾县| 都兰县| 平顶山市| 德阳市| 广宗县| 仁布县| 和田县| 安顺市| 南康市| 类乌齐县| 高雄县| 遵化市| 正镶白旗| 即墨市| 湘西| 广元市| 农安县| 武定县| 松江区| 穆棱市| 永靖县| 乌拉特前旗| 门头沟区| 龙口市| 仙桃市| 彝良县| 依兰县| 正定县| 长宁区| 八宿县| 灵台县| 全州县| 商南县| 蚌埠市|