1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python 之父 :如果想讓代碼運(yùn)行得更快,應(yīng)該使用 PyPy

        共 1863字,需瀏覽 4分鐘

         ·

        2021-11-15 14:26

        ↓↓↓點(diǎn)擊關(guān)注,回復(fù)資料,10個(gè)G的驚喜

        轉(zhuǎn)自:機(jī)器之心,編輯:杜偉、陳萍

        Python 之父 Guido van Rossum曾經(jīng)說過:如果想讓代碼運(yùn)行得更快,應(yīng)該使用 PyPy。

        對于研究人員來說,迅速把想法代碼化并查看其是否行得通至關(guān)重要。Python 是能夠?qū)崿F(xiàn)這一目標(biāo)的出色語言,它能夠讓人們專注于想法本身,而不必過度為代碼格式等無聊的事情困擾。
        但是,Python 有一個(gè)致命的缺點(diǎn):速度比 C、C ++ 等語言慢很多。那么,構(gòu)建一個(gè) Python 原型測試想法之后,如何將其轉(zhuǎn)變?yōu)榭焖偾腋咝阅艿墓ぞ撸客ǔ碚f,人們還要再進(jìn)行一步工作:將 Python 代碼手動轉(zhuǎn)換為 C 語言的代碼。但如果 Python 原型本身就可以運(yùn)行得很快,那么轉(zhuǎn)換代碼的時(shí)間就可以做一些更有意義的事情。
        而 PyPy,恰好可以解決這一問題。它能夠讓 Python 代碼運(yùn)行得比 C 還快。
        import timefrom termcolor import colored
        start = time.time()number = 0for i in range(100000000): number += i print(colored("FINISHED", "green"))print(f"Ellapsed time: {time.time() - start} s")
        為了證明 PyPy 的速度,使用默認(rèn)的 Python 解釋器和 PyPy 運(yùn)行上述代碼,執(zhí)行一個(gè)從整數(shù) 0 加到 100,000,000 的循環(huán), 然后打印出運(yùn)行時(shí)間。運(yùn)行結(jié)果如下:
        運(yùn)行時(shí)間 Python vs PyPy
        這不是學(xué)術(shù)意義上的評估,但該結(jié)果是令人驚嘆的。與大約需要 10 秒鐘的默認(rèn)?Python 解釋器相比,PyPy 僅用 0.22 秒就完成了執(zhí)行。而且無需進(jìn)行任何更改就可以直接將 Python 代碼放到 PyPy 上。而同一臺計(jì)算機(jī)上,等效的 C 語言實(shí)現(xiàn)需要 0.32 秒,PyPy 甚至擊敗了最快的 C 語言。

        為什么 PyPy 這么快?
        盡管代碼完全相同,但代碼的執(zhí)行方式卻大不相同。PyPy 提升速度的秘訣是「即時(shí)編譯( just-in-time compilation)」,即?JIT 編譯。
        提前編譯?
        C、C ++、Swift、Haskell、Rust 等編程語言通常是提前編譯(AOT 編譯)的。這意味著用這些語言編寫代碼之后,編譯器會將源代碼轉(zhuǎn)換成特定計(jì)算機(jī)架構(gòu)可讀的機(jī)器碼。也就是說在執(zhí)行程序時(shí),執(zhí)行的并不是原始源代碼,而是機(jī)器碼。
        提前編譯把源代碼轉(zhuǎn)化為機(jī)器代碼

        解釋語言?

        與 C 語言等上述語言不同,Python、JavaScript、PHP 等語言采用另一種方法——解釋語言。與將源代碼轉(zhuǎn)換為機(jī)器碼相比,解釋的過程中源代碼是保持不變的。每次運(yùn)行程序時(shí),解釋器都會逐行查看代碼并運(yùn)行。例如,每個(gè) Web 瀏覽器都內(nèi)置了 JavaScript 解釋器。
        解釋器逐行運(yùn)行程序
        即時(shí)編譯
        PyPy 是利用即時(shí)編譯來執(zhí)行 Python 代碼的。即 PyPy 不同于解釋器,它并不會逐行運(yùn)行代碼,而是在執(zhí)行程序前先將部分代碼編譯成機(jī)器碼。
        JIT 編譯綜合了提前編譯和解釋
        如上圖所示,而?PyPy 使用的 JIT 編譯是解釋和提前編譯的結(jié)合,可以利用提前編譯來提高性能,并提高解釋型語言的靈活性和跨平臺可用性。
        這也就是為什么PyPy可以讓Python有這么快的執(zhí)行速度了。目前,大部分的使用者還保持使用著默認(rèn)的Python編譯器,如果對速度有要求不妨可以試試PyPy編譯器

        原文鏈接:https://towardsdatascience.com/run-your-python-code-as-fast-as-c-4ae49935a82

        推薦閱讀

        (點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)

        Python 用一行代碼搞事情,機(jī)器學(xué)習(xí)通吃
        用Python學(xué)線性代數(shù):自動擬合數(shù)據(jù)分布
        Github 上最大的開源算法庫,還能學(xué)機(jī)器學(xué)習(xí)!
        終于把 jupyter notebook 玩明白了
        一個(gè)超好用的 Python 標(biāo)準(zhǔn)庫,操作目錄和文件太 666 了
        【免費(fèi)下載】幾百本編程中文書籍(含Python),持續(xù)更新中

        老鐵,三連支持一下,好嗎?↓↓

        瀏覽 54
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            精品尤物在线观看 | 97久久爽无码人妻AⅤ精品牛牛 | 超碰人人乐 | 男女乱轮免费网站 | 女人夜夜春 | 大鸡巴操穴视频 | 国产毛片一区二区三区秋郁浓 | 操逼操逼网站操逼网站呢 | 国产精品在线免费观看 | 总裁大手伸进内衣揉捏小说 |