<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PyPy為什么能讓Python原地起飛,速度比C還快!

          共 2255字,需瀏覽 5分鐘

           ·

          2021-05-09 01:53

          ↑↑↑關(guān)注后"星標"簡說Python

          人人都可以簡單入門Python、爬蟲、數(shù)據(jù)分析
           簡說Python發(fā)布 
          轉(zhuǎn)自:機器之心
          編輯:杜偉、陳萍laobiao 

          大家好,我是老表

          大家常說Python執(zhí)行速度慢,今天給大家推薦一篇關(guān)于PyPy解釋器,它能有效提升代碼運行速度。

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

          對于研究人員來說,迅速把想法代碼化并查看其是否行得通至關(guān)重要。Python 是能夠?qū)崿F(xiàn)這一目標的出色語言,它能夠讓人們專注于想法本身,而不必過度為代碼格式等無聊的事情困擾。
          但是,Python 有一個致命的缺點:速度比 C、C ++ 等語言慢很多。那么,構(gòu)建一個 Python 原型測試想法之后,如何將其轉(zhuǎn)變?yōu)榭焖偾腋咝阅艿墓ぞ??通常來說,人們還要再進行一步工作:將 Python 代碼手動轉(zhuǎn)換為 C 語言的代碼。但如果 Python 原型本身就可以運行得很快,那么轉(zhuǎn)換代碼的時間就可以做一些更有意義的事情。
          而 PyPy,恰好可以解決這一問題。它能夠讓 Python 代碼運行得比 C 還快。
          import time
          from termcolor import colored

          start = time.time()
          number = 0
          for i in range(100000000):
              number += i
              
          print(colored("FINISHED""green"))
          print(f"Ellapsed time: {time.time() - start} s")
          為了證明 PyPy 的速度,使用默認的 Python 解釋器和 PyPy 運行上述代碼,執(zhí)行一個從整數(shù) 0 加到 100,000,000 的循環(huán), 然后打印出運行時間。運行結(jié)果如下:
          運行時間 Python vs PyPy
          這不是學術(shù)意義上的評估,但該結(jié)果是令人驚嘆的。與大約需要 10 秒鐘的默認 Python 解釋器相比,PyPy 僅用 0.22 秒就完成了執(zhí)行。而且無需進行任何更改就可以直接將 Python 代碼放到 PyPy 上。而同一臺計算機上,等效的 C 語言實現(xiàn)需要 0.32 秒,PyPy 甚至擊敗了最快的 C 語言。

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

          解釋語言 

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

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

          --END--

          留言贈書

          贈書規(guī)則給本文點贊+留言,然后 留言集贊數(shù) 排名前 3 的朋友,可獲得《Python編程完全自學教程》贈書一本。

          領(lǐng)書須知:提供拉贊截圖

          開獎時間5月11日 20:00

          注意:中獎?wù)?4小時內(nèi),必須添加我微信領(lǐng)取,逾期不候!為了大家都有機會中獎,本月已經(jīng)中過書的朋友,再次中獎將不在贈書。

          本批書籍由 北京大學出版社 贊助,再次致謝。也歡迎大家自行前往購買支持。

          掃碼即可加我微信

          觀看朋友圈,獲取最新學習資源


          學習更多:
          整理了我開始分享學習筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機器學習等方面,別再說不知道該從哪開始,實戰(zhàn)哪里找了

          點贊”傳統(tǒng)美德不能丟 

          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人毛片一级A片 | 永久免费三级片 | 蜜臀久久99精品久久宅男 | 精品无码123 | 青娱乐中文无码在线观看 |