国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Pyrex來擴(kuò)展和加速Python程序的教程

2020-02-23 00:41:29
字體:
供稿:網(wǎng)友

 Pyrex 是一種專門設(shè)計(jì)用來編寫 Python 擴(kuò)展模塊的語言。根據(jù) Pyrex Web 站點(diǎn)的介紹,“它被設(shè)計(jì)用來在友好易用的高級(jí) Python 世界和凌亂的低級(jí) C 世界之間搭建一個(gè)橋梁。”雖然幾乎所有的 Python 代碼都可以作為有效的 Pyrex 代碼使用,但是您可以在 Pyrex 代碼中添加可選的靜態(tài)類型聲明,從而使得這些聲明過的對(duì)象以 C 語言的速度運(yùn)行。
加速 Python

從某種意義上來說,Pyrex 只是不斷發(fā)展的 Python 類語言系列的一個(gè)部分:Jython、IronPython、Prothon、Boo、Vyper(現(xiàn)在沒人用了)、Stackless Python(以一種方式)或 Parrot runtime(以另外一種方式)。按照語言的術(shù)語來說,Pyrex 本質(zhì)上是在 Python 中添加了類型聲明。它的另外幾個(gè)變化沒有這么重要(不過對(duì) for 循環(huán)的擴(kuò)展很漂亮)。

然而,您真正希望使用 Pyrex 的原因是它編寫的模塊比純 Python 運(yùn)行得更快,可能會(huì)快很多。

實(shí)際上,Pyrex 會(huì)從 Pyrex 代碼生成一個(gè) C 程序。中間文件 module.c 依然可以用于手工處理。然而對(duì)于“普通的” Pyrex 用戶來說,沒有什么理由需要修改所生成的 C 模塊。Pyrex 本身可以讓您訪問那些對(duì)速度至關(guān)重要的 C 級(jí)代碼,而節(jié)省了編寫內(nèi)存分配、回收、指針運(yùn)算、函數(shù)原型等的工作。Pyrex 還可以無縫地處理 Python 級(jí)對(duì)象的所有接口;通常它都是通過在必要的地方將變量聲明為 PyObject 結(jié)構(gòu)并使用 Python C-API 調(diào)用進(jìn)行內(nèi)存處理和類型轉(zhuǎn)換而實(shí)現(xiàn)的。

對(duì)于大部分情況來說,Pyrex 不需要不斷對(duì)簡單數(shù)據(jù)類型變量進(jìn)行裝箱(box) 和 拆箱(unbox) 操作,因此速度比 Python 更快。例如,Python 中的 int 類型是一個(gè)具有很多方法的對(duì)象。它有一個(gè)繼承樹,自己有一個(gè)計(jì)算好的“方法解析順序(mothod resolution order,MRO)”。它有分配和回收方法可以用于內(nèi)存處理。它知道何時(shí)將自己轉(zhuǎn)換為一個(gè) long 類型,以及如何對(duì)其他類型的值進(jìn)行數(shù)值運(yùn)算。所有這些額外的功能都意味著在使用 int 對(duì)象進(jìn)行處理時(shí)需要經(jīng)過更多級(jí)的間接處理或條件檢查。另外一方面,C 或 Pyrex 的 int 變量只是內(nèi)存中各個(gè)位設(shè)置為 1 或 0 的一個(gè)區(qū)域。使用 C/Pyrex 的 int 類型進(jìn)行處理不需要涉及 任何 間接操作或條件檢查。一個(gè) CPU “加”操作在硅芯片中就可以執(zhí)行完了。

在仔細(xì)選擇的情況中,Pyrex 模塊的速度可以比 Python 版本的相同模塊的運(yùn)行速度快 40 到 50 倍。但是與使用 C 本身 編寫的模塊相比,Pyrex 版本的模塊幾乎都不會(huì)比 Python 版本的模塊更長,代碼更類似于 Python,而不是 C。

當(dāng)然,當(dāng)您開始談?wù)摷铀伲悾㏄ython 模塊時(shí),Pyrex 并不是惟一可用的工具。在 Python 開發(fā)者的選擇中,也可以使用 Psyco。Psyco 可以保持代碼非常簡短;它是(x86)機(jī)器代碼中的一個(gè) JIT Python 代碼編譯器。與 Pyrex 不同,Psyco 并不會(huì)精確地限定變量的類型,而是根據(jù)數(shù)據(jù) 可能 是哪種類型的每種假設(shè)為每個(gè) Python 代碼塊創(chuàng)建幾種可能的機(jī)器代碼。如果在一個(gè)給定的代碼段中數(shù)據(jù)是是簡單類型,例如 int,那么這段代碼(如果是一個(gè)循環(huán),這種情況就更為突出)就可以很快地運(yùn)行。例如,x 在一個(gè)執(zhí)行一百萬次的循環(huán)中可以是 int 類型,但是在循環(huán)結(jié)束時(shí)可以依然是一個(gè) float 類型的值。Psyco 可以使用與在 Pyrex 中顯式指定的類型相同的類型來加速循環(huán)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平定县| 嘉荫县| 桦川县| 武定县| 东方市| 中超| 台湾省| 建昌县| 柞水县| 淳安县| 讷河市| 南陵县| 嘉善县| 石楼县| 高邮市| 云梦县| 富阳市| 都江堰市| 万宁市| 西畴县| 汶川县| 长宁区| 资阳市| 额济纳旗| 阿勒泰市| 曲阜市| 松阳县| 平远县| 丁青县| 甘谷县| 屏山县| 莎车县| 昌江| 舟曲县| 建水县| 淮安市| 彭山县| 平湖市| 龙州县| 大姚县| 梅州市|