91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

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

      手機(jī)站
      千鋒教育

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

      千鋒教育

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

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

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

      當(dāng)前位置:首頁  >  技術(shù)干貨  > 為什么Python運(yùn)行速度慢?

      為什么Python運(yùn)行速度慢?

      來源:千鋒教育
      發(fā)布人:xqq
      時間: 2023-10-11 12:54:26 1697000066

      一、Python運(yùn)行速度慢的原因

      1、python是解釋性語言

      python是一個解釋性的動態(tài)類型腳本語言,解釋性語言的特點(diǎn)就是程序只有在執(zhí)行的時候才會去編譯,也就是說邊執(zhí)行邊進(jìn)行編譯。而Java、C這種編譯性的語言在程序執(zhí)行之前就已經(jīng)將其編譯為機(jī)器可讀的代碼了,自然運(yùn)行速度快。而且python程序在沒有運(yùn)行之前都是能夠直接以源碼的形式存在的,這也是它能夠跨平臺運(yùn)行的主要原因,但是在沒有經(jīng)過編譯的python運(yùn)行速度上就會有所降低。

      2、Python是動態(tài)語言

      動態(tài)語言是一類在運(yùn)行時可以改變其結(jié)構(gòu)的語言,如新的函數(shù)、對象、代碼可以被引入,已有的函數(shù)可以被刪除或其他結(jié)構(gòu)上的變化等,該類語言更具有活性,但是不可避免的因為運(yùn)行時的不確定性也影響運(yùn)行效率。數(shù)據(jù)的比較和轉(zhuǎn)換類型的開銷很大,每次讀取、寫入或引用一個變量,都要檢查類型。很難優(yōu)化一種極具動態(tài)性的語言。Python的許多替代語言之所以快得多,原因在于它們?yōu)榱诵阅茉陟`活性方面作出了犧牲。

      3、Python中一切都是對象

      Python是一門面向?qū)ο蟮木幊陶Z言,其設(shè)計理念是一切皆是對象,如數(shù)字、字符串、元組、列表、字典、函數(shù)、方法、類、模塊等都是對象,包括代碼,每個對象都需要維護(hù)引用計數(shù),因此,增加了額外工作,影響了性能。

      4、Python GIL

      GIL是Python最為詬病的一點(diǎn),因為GIL,Python中的多線程并不能真正的并發(fā),即使在單線程,GIL也會帶來很大的性能影響,因為python每執(zhí)行100個opcode就會嘗試線程的切換,因此,影響Python運(yùn)行效率。

      5、垃圾回收機(jī)制

      Python采用標(biāo)記和分代的垃圾回收策略,每次垃圾回收的時候都會中斷正在執(zhí)行的程序,造成所謂的頓卡,影響運(yùn)行效率。

      二、提升Python性能的方案

      1、Cython

      是Python的C語言擴(kuò)展,cPython是一門單獨(dú)的語言,專門用來寫在Python里面的import用的擴(kuò)展庫。CPython跟Python語法基本一致,而CPython有專門的編譯器。據(jù)說,Cython提供了一些特性來讓代碼更高效,比如變量類型化,這本質(zhì)上是C要求的。一些科學(xué)計算的包,如scikit-learn依賴Cython的一些特性來保持操作簡潔快速。

      2、Pyston

      Pyston,由Dropbox資助,使用LLVM編譯器架構(gòu)來加速Python,同樣的它也使用了適時編譯。相比于PyPy,Pyston還處于早期階段,它只支持Python的部分特性。Pyston把工作分成兩個部分,一部分是語言的核心特性,另一部分是把性能提升到可接受的程度。Pyston距離可以在生產(chǎn)環(huán)境使用還有一段距離

      3、Nuitka

      是一個Python的替代品,它可以將Python代碼轉(zhuǎn)換為C++代碼,然后編譯為可執(zhí)行文件,并且通過調(diào)用Python的API的方式實(shí)現(xiàn)從解析語言到編譯語言的轉(zhuǎn)換,在轉(zhuǎn)換到C++的過程中直接使用python的解釋器,可以保證100%的語法兼容。

      4、Numba

      Numba結(jié)合了上面幾個項目的想法。學(xué)習(xí)了Cython,Numba也采用了部分加速的策略,只加速CPU密集型的任務(wù);同時它又學(xué)習(xí)了PyPy和Pyston,通過LLVM運(yùn)行Python。你可以用一個裝飾器指定你要用Numba編譯的函數(shù),Numba繼承Numpy來加速函數(shù)的執(zhí)行,Numba不做適時編譯,它的代碼是預(yù)先編譯的。

      5、PyPy

      在選擇CPython的簡易替代語言時,pypy無疑時優(yōu)異之選,與現(xiàn)有Python代碼保持高度兼容性,pypy也是默認(rèn)程序運(yùn)行時的一個很好選擇。PyPy使用了Just-in-Time即時編譯器,動態(tài)編譯器與靜態(tài)編譯器不同,利用程序運(yùn)行的過程的數(shù)據(jù)進(jìn)行優(yōu)化。

      PyPy使用適時編譯來加速Python,這項技術(shù)Google也在使用,Google在V8引擎中使用它加速Javascript。最近的版本PyPy2.5增加了一些提升性能的特性,其中有一項很受歡迎,它集成了Numpy,Numpy之前也一直被用來加速Python的運(yùn)行。

      延伸閱讀1:Python優(yōu)勢

      Python最大的優(yōu)勢在于效率。有時候程序員或科研工作者的效率比機(jī)器的效率更重要,對于很多復(fù)雜性的功能,使用更加清晰的語言能給程序減少更多的負(fù)擔(dān),從而大大增強(qiáng)程序的質(zhì)量,其易學(xué)性和擴(kuò)展性也能讓新手很快上手。雖然Python底層運(yùn)行速度要比C語言慢,但Python清晰的結(jié)構(gòu)能解放程序員的時間,同時很方便的和其他編程語言代碼(如C語言)融合在一起。

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
      請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
      免費(fèi)領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      Spring和Spring Boot有什么區(qū)別?

      一、Spring和Spring Boot的區(qū)別1、基于的概念不同Spring是一個完整的企業(yè)級應(yīng)用程序開發(fā)框架,它提供了一系列的模塊,如Spring Core、Spring MV...詳情>>

      2023-10-11 14:36:13
      APP開發(fā)和小程序開發(fā)有什么不同?

      一、APP開發(fā)和小程序開發(fā)的不同1、平臺限制不同APP開發(fā)需要針對不同的操作系統(tǒng),如iOS、Android等進(jìn)行開發(fā),而小程序只能在微信、支付寶、百度...詳情>>

      2023-10-11 14:33:12
      JS正則中exec與match有哪些區(qū)別?

      一、JS正則中exec與match的區(qū)別1、匹配多個結(jié)果不同exec()方法會匹配并返回所有滿足正則表達(dá)式條件的結(jié)果,而match()方法只會返回名列前茅個滿...詳情>>

      2023-10-11 14:25:31
      沒有內(nèi)存泄漏,為什么還會OOM?

      一、沒有內(nèi)存泄漏還會OOM的原因即使沒有內(nèi)存泄漏,也有可能出現(xiàn)OOM(Out of Memory)的情況,這通常是由于應(yīng)用程序占用的內(nèi)存超過了系統(tǒng)可用的...詳情>>

      2023-10-11 13:45:53
      為什么要初始化CSS樣式?

      一、初始化CSS樣式的原因在Web開發(fā)中,初始化CSS樣式是一個常見的做法。這是因為不同的瀏覽器會對同一份HTML代碼進(jìn)行不同的解析和渲染,可能會...詳情>>

      2023-10-11 13:37:57