十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
今天小編給大家分享一下如何使用C語言優(yōu)化Python代碼的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

東風(fēng)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,東風(fēng)網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為東風(fēng)近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個售后服務(wù)好的東風(fēng)做網(wǎng)站的公司定做!
Cython 創(chuàng)建的 C 模塊可以加速 Python 代碼的執(zhí)行,這對使用效率不高的解釋型語言編寫的復(fù)雜應(yīng)用是很重要的。
Cython 是 Python 編程語言的編譯器,旨在優(yōu)化性能并形成一個擴(kuò)展的 Cython 編程語言。作為 Python 的擴(kuò)展,Cython 也是 Python 語言的超集,它支持調(diào)用 C 函數(shù)和在變量和類屬性上聲明 C 類型。這使得包裝外部 C 庫、將 C 嵌入現(xiàn)有應(yīng)用程序或者為 Python 編寫像 Python 一樣簡單的 C 語言擴(kuò)展語法變得容易。
Cython 一般用于創(chuàng)建 C 模塊來加速 Python 代碼的執(zhí)行。這在使用解釋型語言編寫的效率不高的復(fù)雜應(yīng)用中非常重要。
你可以在 Linux、BSD、Windows 或 macOS 上安裝 Cython 來使用 Python:
$ python -m pip install Cython
安裝好后,就可以使用它了。
使用 Cython 的一個好的方式是從一個簡單的 “hello world” 開始。這雖然不是展示 Cython 優(yōu)點(diǎn)的最好方式,但是它展示了使用 Cython 時發(fā)生的情況。
首先,創(chuàng)建一個簡單的 Python 腳本,文件命名為 hello.pyx(.pyx 擴(kuò)展名并不神奇,從技術(shù)上它可以是任何東西,但它是 Cython 的默認(rèn)擴(kuò)展名):
print("hello world")接下來,創(chuàng)建一個 Python 設(shè)置腳本。一個像 Python 的 makefile 一樣的 setup.py,Cython 可以使用它來處理你的 Python 代碼:
from setuptools import setupfrom Cython.Build import cythonize setup( ext_modules = cythonize("hello.pyx"))最后,使用 Cython 將你的 Python 腳本轉(zhuǎn)換為 C 代碼:
$ python setup.py build_ext --inplace
你可以在你的工程目錄中看到結(jié)果。Cython 的 cythonize 模塊將 hello.pyx 轉(zhuǎn)換成一個 hello.c 文件和一個 .so 庫。這些 C 代碼有 2648 行,所以它比一個一行的 hello.pyx 源碼的文本要多很多。.so 庫也比它的源碼大 2000 倍(即 54000 字節(jié)和 20 字節(jié)相比)。然后,Python 需要運(yùn)行單個 Python 腳本,所以有很多代碼支持這個只有一行的 hello.pyx 文件。
要使用 Python 的 “hello world” 腳本的 C 代碼版本,請打開一個 Python 提示符并導(dǎo)入你創(chuàng)建的新 hello 模塊:
>>> import hellohello world
測試計算能力的一個很好的通用測試是計算質(zhì)數(shù)。質(zhì)數(shù)是一個比 1 大的正數(shù),且它只有被 1 或它自己除后才會產(chǎn)生正整數(shù)。雖然理論很簡單,但是隨著數(shù)的變大,計算需求也會增加。在純 Python 中,可以用 10 行以內(nèi)的代碼完成質(zhì)數(shù)的計算。
import sys number = int(sys.argv[1])if not number <= 1: for i in range(2, number): if (number % i) == 0: print("Not prime") breakelse: print("Integer must be greater than 1")這個腳本在成功的時候是不會提醒的,如果這個數(shù)不是質(zhì)數(shù),則返回一條信息:
$ ./prime.py 3$ ./prime.py 4Not prime.
將這些轉(zhuǎn)換為 Cython 需要一些工作,一部分是為了使代碼適合用作庫,另一部分是為了提高性能。
許多用戶將 Python 當(dāng)作一種腳本語言來學(xué)習(xí):你告訴 Python 想讓它執(zhí)行的步驟,然后它來做。隨著你對 Python(以及一般的開源編程)的了解越多,你可以了解到許多強(qiáng)大的代碼都存在于其他應(yīng)用程序可以利用的庫中。你的代碼越 不具有針對性,程序員(包括你)就越可能將其重用于其他的應(yīng)用程序。將計算和工作流解耦可能需要更多的工作,但最終這通常是值得的。
在這個簡單的質(zhì)數(shù)計算的例子中,將其轉(zhuǎn)換成 Cython,首先是一個設(shè)置腳本:
from setuptools import setupfrom Cython.Build import cythonize setup( ext_modules = cythonize("prime.py"))將你的腳本轉(zhuǎn)換成 C:
$ python setup.py build_ext --inplace
到目前為止,一切似乎都工作的很好,但是當(dāng)你試圖導(dǎo)入并使用新模塊時,你會看到一個錯誤:
>>> import primeTraceback (most recent call last): File "", line 1, in File "prime.py", line 2, in init prime number = sys.argv[1]IndexError: list index out of range
這個問題是 Python 腳本希望從一個終端運(yùn)行,其中參數(shù)(在這個例子中是要測試是否為質(zhì)數(shù)的整數(shù))是一樣的。你需要修改你的腳本,使它可以作為一個庫來使用。
庫不使用系統(tǒng)參數(shù),而是接受其他代碼的參數(shù)。對于用戶輸入,與其使用 sys.argv,不如將你的代碼封裝成一個函數(shù)來接收一個叫 number(或者 num,或者任何你喜歡的變量名)的參數(shù):
def calculate(number): if not number <= 1: for i in range(2, number): if (number % i) == 0: print("Not prime") break else: print("Integer must be greater than 1")這確實(shí)使你的腳本有些難以測試,因?yàn)楫?dāng)你在 Python 中運(yùn)行代碼時,calculate 函數(shù)永遠(yuǎn)不會被執(zhí)行。但是,Python 編程人員已經(jīng)為這個問題設(shè)計了一個通用、還算直觀的解決方案。當(dāng) Python 解釋器執(zhí)行一個 Python 腳本時,有一個叫 __name__ 的特殊變量,這個變量被設(shè)置為 __main__,但是當(dāng)它被作為模塊導(dǎo)入的時候,__name__ 被設(shè)置為模塊的名字。利用這點(diǎn),你可以寫一個既是 Python 模塊又是有效 Python 腳本的庫:
import sys def calculate(number): if not number <= 1: for i in range(2, number): if (number % i) == 0: print("Not prime") break else: print("Integer must be greater than 1") if __name__ == "__main__": number = sys.argv[1] calculate( int(number) )現(xiàn)在你可以用一個命令來運(yùn)行代碼了:
$ python ./prime.py 4Not a prime
你可以將它轉(zhuǎn)換為 Cython 來用作一個模塊:
>>> import prime>>> prime.calculate(4)Not prime
以上就是“如何使用C語言優(yōu)化Python代碼”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。