欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析Python擴(kuò)展模塊的加速方案

 更新時(shí)間:2021年09月13日 09:30:38   作者:燕山588  
這章我們來(lái)介紹Python的擴(kuò)展名之ctypes,教大家認(rèn)識(shí)ctypes,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪

ctypes(一)

 — 初識(shí)

 很多初學(xué)Python的新手,總是嘴邊掛著一句話:“Python是一門膠水語(yǔ)言”。

可是究竟什么是膠水語(yǔ)言呢?相信很多人都不知道,或者誤以為膠水就是可以直接和其他所有語(yǔ)言配合的語(yǔ)言。

雖然如今Python已經(jīng)發(fā)展得很強(qiáng)大了,“膠水語(yǔ)言”這個(gè)特性已經(jīng)很少被提及了。但是膠水仍然是它現(xiàn)在應(yīng)用得最廣泛的特性之一。只不過(guò)從曾經(jīng)Python為輔變成了如今的Python為主而已。

那么到底什么是“膠水特性”呢?

其實(shí)Python自打出生以來(lái)就和C語(yǔ)言有莫大的關(guān)聯(lián),它可以調(diào)用現(xiàn)有的C/C++程序,而不用做那些重復(fù)造輪子的事。使得節(jié)約了大量的重新開發(fā)的成本。許多的現(xiàn)有C程序代碼可以用一個(gè)Python作為中樞來(lái)管理和調(diào)用,就好像這些C程序“被膠水粘住了”一樣。這就是膠水特性的來(lái)源。

隨著Python語(yǔ)言的發(fā)展,Python已經(jīng)變得足夠強(qiáng)大和健壯,在不斷優(yōu)化性能的過(guò)程中,膠水這一特性被逐漸弱化,因?yàn)镻ython已經(jīng)強(qiáng)大到不需要依附C語(yǔ)言而存在。但是這一特性讓然被保留了下來(lái)。那么,既然Python已經(jīng)足夠強(qiáng)大,那么還需要這一特性做什么呢?

說(shuō)到底,Python是一個(gè)解釋型動(dòng)態(tài)腳本語(yǔ)言,再加上十幾年沒有解決的GIL鎖,無(wú)論是執(zhí)行效率還是并發(fā)性都是Python最大的缺點(diǎn)。

因此這個(gè)特性的存在給如今的Pythoner一個(gè)新的選擇,那些對(duì)執(zhí)行效率和并發(fā)性有著極高要求的模塊,使用C來(lái)實(shí)現(xiàn)。使用C來(lái)輔助Python解決某些特殊情況下的性能問(wèn)題,成了如今Python社區(qū)中最為普遍的方案,很多人不知道,事實(shí)上很多我們常用的庫(kù)都利用了這一特性。

數(shù)據(jù)兼容層

由于Python這一特性是一個(gè)大家族,我們先來(lái)了解一下Python與C之間做的一個(gè)兼容層模塊 — ctypes 模塊。

了解 ctypes模塊之前,我們需要先了解 ctypes 提供了哪些用于兼容的數(shù)據(jù)類型:

注:一下表格是根據(jù)Python3版本列出,區(qū)別僅僅是原生字符串類型和long整型而已

圖片.png

圖片.png

嘗試共享庫(kù)

什么是共享庫(kù)?

其實(shí)C語(yǔ)言在經(jīng)過(guò)編譯之后不一定要生成可執(zhí)行文件,可以以一種共享給其他程序調(diào)用的“共享庫(kù)”的形式存在,其他程序通過(guò)調(diào)用這個(gè)共享庫(kù),就可以利用這個(gè)現(xiàn)有C編譯過(guò)的程序了。

為了對(duì)各位新手朋友能夠更加產(chǎn)生更加直接的幫助,我們以Windows系統(tǒng)為例,調(diào)用VC共享庫(kù)。Windows下默認(rèn)給VC共享庫(kù)加上dll擴(kuò)展名后綴。

我們以加載 cdecl 調(diào)用規(guī)則函數(shù)的 cdll 模塊進(jìn)行展示

首先,我們必須要導(dǎo)入 cdll 可以參考一下語(yǔ)句

from ctypes import cdll

然后可以直接通過(guò)對(duì) cdll 的屬性訪問(wèn)獲得 msvcrt.dll 共享庫(kù)文件的連接

libc = cdll.msvcrt

接著,我們就可以從這個(gè)共享庫(kù)中獲得相應(yīng)的VC函數(shù)了,最常見的是printf函數(shù)(ps:不知道有沒有引起一些老司機(jī)的眼淚呢?)

printf = libc.printf

既然已經(jīng)拿到了一個(gè)共享庫(kù)中的函數(shù),那么我們就來(lái)牛刀小試一下吧

我們首先在IDLE里面試著運(yùn)行一下

什么也沒有發(fā)生!貌似被深深的欺騙了!別急,這其中自由原因。

我們先來(lái)看看,printf函數(shù)調(diào)用的結(jié)果是什么,使用print查看

看樣子printf函數(shù)的返回值是輸出的字節(jié)數(shù),可是我們還有一個(gè)問(wèn)題沒有解決,那就是,輸出在哪呢?

其實(shí)printf函數(shù)是C的函數(shù),并不會(huì)輸出到Python中來(lái),因此要使用控制臺(tái)來(lái)輸出

是不是已經(jīng)成功輸出了?

在了解這些最基礎(chǔ)的知識(shí)以后,我們就可以更加深入的去了解其中相關(guān)的規(guī)則,下次我們會(huì)具體介紹一些其中的規(guī)則,讓你對(duì)這個(gè)庫(kù)的使用更加得心應(yīng)手。

以上就是解析Python擴(kuò)展模塊的加速方案的詳細(xì)內(nèi)容,更多關(guān)于Python擴(kuò)展模塊加速方案的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python requests 使用快速入門

    python requests 使用快速入門

    這篇文章主要介紹了python requests 使用快速入門教程,使用 Requests 發(fā)送網(wǎng)絡(luò)請(qǐng)求非常簡(jiǎn)單,具體操作方法,大家參考下本文吧
    2017-08-08
  • python實(shí)現(xiàn)圖像高斯金字塔的示例代碼

    python實(shí)現(xiàn)圖像高斯金字塔的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)圖像高斯金字塔的示例代碼,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • 如何用python爬取微博熱搜數(shù)據(jù)并保存

    如何用python爬取微博熱搜數(shù)據(jù)并保存

    這篇文章主要介紹了如何用python爬取微博熱搜數(shù)據(jù)并保存,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 解決pycharm 格式報(bào)錯(cuò)tabs和space不一致問(wèn)題

    解決pycharm 格式報(bào)錯(cuò)tabs和space不一致問(wèn)題

    這篇文章主要介紹了解決pycharm 格式報(bào)錯(cuò)tabs和space不一致問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Python中pass的作用與使用教程

    Python中pass的作用與使用教程

    這篇文章主要給大家介紹了關(guān)于Python中pass的作用與使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Pytorch環(huán)境搭建與基本語(yǔ)法

    Pytorch環(huán)境搭建與基本語(yǔ)法

    這篇文章主要介紹了Pytorch環(huán)境搭建與基本語(yǔ)法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 使用C語(yǔ)言擴(kuò)展Python程序的簡(jiǎn)單入門指引

    使用C語(yǔ)言擴(kuò)展Python程序的簡(jiǎn)單入門指引

    這篇文章主要介紹了使用C語(yǔ)言擴(kuò)展Python程序的簡(jiǎn)單入門指引,來(lái)自于IBM官網(wǎng)網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python?pyinstaller打包exe最新完整圖文教程

    Python?pyinstaller打包exe最新完整圖文教程

    pyinstaller是一個(gè)非常簡(jiǎn)單的打包python的py文件的庫(kù),下面這篇文章主要給大家介紹了關(guān)于Python?pyinstaller打包exe的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • python讀取pdf格式文檔的實(shí)現(xiàn)代碼

    python讀取pdf格式文檔的實(shí)現(xiàn)代碼

    這篇文章主要給大家介紹了關(guān)于python讀取pdf格式文檔的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 生成Jupyter Lab快捷方式的小技巧

    生成Jupyter Lab快捷方式的小技巧

    這篇文章主要介紹了生成Jupyter Lab快捷方式的小技巧,操作迅猛,花費(fèi)時(shí)間少,步驟詳細(xì),有需要的朋友可以參考下,希望可以對(duì)廣大讀者朋友有所幫助
    2021-09-09

最新評(píng)論