<option id="mwy0y"><strong id="mwy0y"></strong></option>
  • <ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <ul id="mwy0y"></ul>
  • <del id="mwy0y"><dfn id="mwy0y"></dfn></del><ul id="mwy0y"><sup id="mwy0y"></sup></ul>
  • <abbr id="mwy0y"></abbr>

    千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

    400-811-9990
    手機(jī)站
    千鋒教育

    千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

    千鋒教育

    掃一掃進(jìn)入千鋒手機(jī)站

    領(lǐng)取全套視頻
    千鋒教育

    關(guān)注千鋒學(xué)習(xí)站小程序
    隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

    上海
    • 北京
    • 鄭州
    • 武漢
    • 成都
    • 西安
    • 沈陽
    • 廣州
    • 南京
    • 深圳
    • 大連
    • 青島
    • 杭州
    • 重慶
    當(dāng)前位置:長沙千鋒IT培訓(xùn)  >  技術(shù)干貨  >  使用Cython為Python編寫更快的C擴(kuò)展

    使用Cython為Python編寫更快的C擴(kuò)展

    來源:千鋒教育
    發(fā)布人:xqq
    時(shí)間: 2023-11-07 11:54:50

    使用Python很有趣,但有時(shí),用它編寫的程序可能很慢。所有的運(yùn)行時(shí)動態(tài)調(diào)度會帶來很大的代價(jià):有時(shí)它比用C或Rust等系統(tǒng)語言編寫的等效代碼慢10倍。

    將代碼遷移到一種全新的語言可能會在成本和可靠性方面付出巨大代價(jià):所有的手工重寫工作都將不可避免地引入錯(cuò)誤。我們可以兩者兼得么?

    為了練習(xí)一下優(yōu)化,我們需要一些慢代碼。有什么比斐波那契數(shù)列的意外指數(shù)實(shí)現(xiàn)更慢?

    deffib(n):

    ifn<2:

    return1

    returnfib(n-1)+fib(n-2)

    由于對fib的調(diào)用會導(dǎo)致兩次再次調(diào)用,因此這種效率極低的算法需要很長時(shí)間才能執(zhí)行。例如,在我的新筆記本電腦上,fib(36)需要大約4.5秒。這個(gè)4.5秒會成為我們探索Python的Cython擴(kuò)展能提供的幫助的基準(zhǔn)。

    使用Cython的正確方法是將其集成到setup.py中。然而,使用pyximport可以快速地進(jìn)行嘗試。讓我們將fib代碼放在fib.pyx中并使用Cython運(yùn)行它。

    >>>importpyximport;pyximport.install()

    >>>importfib

    >>>fib.fib(36)

    只使用Cython而不修改代碼,這個(gè)算法在我筆記本上花費(fèi)的時(shí)間減少到大約2.5秒。幾乎無需任何努力,這幾乎減少了50%的運(yùn)行時(shí)間。當(dāng)然,得到了一個(gè)不錯(cuò)的成果。

    加把勁,我們可以讓它變得更快。

    cpdefintfib(intn):

    ifn<2:

    return1

    returnfib(n-1)+fib(n-2)

    我們將fib中的代碼變成用cpdef定義的函數(shù),并添加了兩個(gè)類型注釋:它接受一個(gè)整數(shù)并返回一個(gè)整數(shù)。

    這個(gè)變得快多了,大約只用了0.05秒。它是如此之快,以至于我可能開始懷疑我的測量方法包含噪聲:之前,這種噪聲在信號中丟失了。

    當(dāng)下次你的Python代碼花費(fèi)太多CPU時(shí)間時(shí),也許會導(dǎo)致風(fēng)扇狂轉(zhuǎn),為何不看看Cython是否可以解決問題呢?

    以上內(nèi)容為大家介紹了使用Cython為Python編寫更快的C擴(kuò)展,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.mobiletrain.org/

    聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

    猜你喜歡LIKE

    python實(shí)現(xiàn)WSGI的框架

    2023-11-13

    python打開文本文件有哪些方法?

    2023-11-13

    python使用loguru操作日志

    2023-11-13

    最新文章NEW

    python-=是什么意思

    2023-11-13

    pythonre是什么?

    2023-11-13

    python列表追加元素出錯(cuò)的解決

    2023-11-13

    相關(guān)推薦HOT

    更多>>

    快速通道 更多>>

    最新開班信息 更多>>

    網(wǎng)友熱搜 更多>>