国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

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

            手機(jī)站
            千鋒教育

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

            千鋒教育

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

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

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

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

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

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

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

            1、python是解釋性語言

            python是一個(gè)解釋性的動態(tài)類型腳本語言,解釋性語言的特點(diǎn)就是程序只有在執(zhí)行的時(shí)候才會去編譯,也就是說邊執(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)行時(shí)可以改變其結(jié)構(gòu)的語言,如新的函數(shù)、對象、代碼可以被引入,已有的函數(shù)可以被刪除或其他結(jié)構(gòu)上的變化等,該類語言更具有活性,但是不可避免的因?yàn)檫\(yùn)行時(shí)的不確定性也影響運(yùn)行效率。數(shù)據(jù)的比較和轉(zhuǎn)換類型的開銷很大,每次讀取、寫入或引用一個(gè)變量,都要檢查類型。很難優(yōu)化一種極具動態(tài)性的語言。Python的許多替代語言之所以快得多,原因在于它們?yōu)榱诵阅茉陟`活性方面作出了犧牲。

            3、Python中一切都是對象

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

            4、Python GIL

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

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

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

            二、提升Python性能的方案

            1、Cython

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

            2、Pyston

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

            3、Nuitka

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

            4、Numba

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

            5、PyPy

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

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

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

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

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(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是一個(gè)完整的企業(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、匹配多個(gè)結(jié)果不同exec()方法會匹配并返回所有滿足正則表達(dá)式條件的結(jié)果,而match()方法只會返回名列前茅個(gè)滿...詳情>>

            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樣式是一個(gè)常見的做法。這是因?yàn)椴煌臑g覽器會對同一份HTML代碼進(jìn)行不同的解析和渲染,可能會...詳情>>

            2023-10-11 13:37:57