官术网_书友最值得收藏!

1.3 Python的短板

雖然Python擁有很多優(yōu)點(diǎn),但沒有哪種編程語言能夠勝任所有工作,因此Python并不能完美地滿足一切需求。如果要確定Python是否適用于當(dāng)前場景,還需要了解Python不擅長的領(lǐng)域。

1.3.1 Python不是速度最快的語言

Python的執(zhí)行速度可能算得上是一個(gè)缺點(diǎn)。Python不是一個(gè)完全編譯的語言,而是先編譯為內(nèi)部字節(jié)碼形式,然后交由Python解釋器來執(zhí)行。Python為某些操作給出了高效的實(shí)現(xiàn),例如,用正則表達(dá)式解析字符串,可以做到與自己編寫的任何C語言代碼一樣快,甚至?xí)?。但在大多?shù)情況下,采用Python會(huì)比C之類的語言實(shí)現(xiàn)更慢。但大家應(yīng)該保持以下觀點(diǎn):對(duì)絕大多數(shù)應(yīng)用程序而言,現(xiàn)代計(jì)算機(jī)的計(jì)算能力都是過剩的。開發(fā)速度比程序運(yùn)行速度更為重要,而Python程序通常編寫速度會(huì)快很多。另外,用C或C ++編寫的模塊對(duì)Python進(jìn)行擴(kuò)展也比較容易,程序當(dāng)中的CPU密集型部分可以交由這些模塊來運(yùn)行。

1.3.2 Python的庫不算最多

雖然Python自帶了一批優(yōu)秀的函數(shù)庫集合,而且還有很多其他庫可用,但是Python在庫的數(shù)量上并不算領(lǐng)先。像C、Java和Perl之類的編程語言,可用的庫集合數(shù)量更為龐大。它們?cè)谀承╊I(lǐng)域提供的解決方案是Python所沒有的,或者Python可能只提供了其中的一種可選方案。不過這些往往是相當(dāng)專業(yè)的領(lǐng)域,而Python是很容易擴(kuò)展的,既可以用Python,也可以用C或其他語言的現(xiàn)有庫。對(duì)于幾乎所有的常規(guī)計(jì)算問題,Python庫的支持能力都非常出色。

1.3.3 Python在編譯時(shí)不檢查變量類型

與某些其他編程語言不同,Python變量不像容器那樣工作,而更像是引用整數(shù)、字符串、類實(shí)例等各類對(duì)象的標(biāo)簽。這表示這些對(duì)象本身雖然是有類型的,但引用它們的變量并沒有與類型進(jìn)行綁定。變量x可能在某一行代碼中引用一個(gè)字符串,而在另一行代碼中引用一個(gè)整數(shù):

Python將類型與對(duì)象關(guān)聯(lián),而不是與變量關(guān)聯(lián),這就意味著Python解釋器無法識(shí)別出變量類型不符的錯(cuò)誤。假設(shè)變量count本來是用來保存整數(shù)的,但如果將字符串"two"賦給它,在Python里也完全沒問題。傳統(tǒng)的程序員將這種處理方式算作一個(gè)缺點(diǎn),因?yàn)閷?duì)代碼失去了額外的免費(fèi)檢查。但是這種錯(cuò)誤通常不難發(fā)現(xiàn)和修復(fù),Python的代碼檢測功能可以避免類型錯(cuò)誤的發(fā)生。大多數(shù)Python程序員都認(rèn)為,動(dòng)態(tài)類型的靈活性是劃得來的。

1.3.4 Python對(duì)移動(dòng)應(yīng)用的支持不足

在過去的10年中,移動(dòng)設(shè)備的數(shù)量和種類都出現(xiàn)了爆炸式的增長,到處都是智能手機(jī)、平板電腦、平板手機(jī)、Chromebook,運(yùn)行的操作系統(tǒng)也是五花八門。Python在移動(dòng)計(jì)算領(lǐng)域并不算強(qiáng)大。雖然有解決方案可選,但在移動(dòng)設(shè)備上運(yùn)行Python并不總是能一帆風(fēng)順,用Python編寫和發(fā)布商業(yè)應(yīng)用還存在問題。

1.3.5 Python對(duì)多處理器的利用不充分

現(xiàn)在多核處理器已經(jīng)普及,在很多情況下也都會(huì)帶來性能的明顯提升。但是,由于具有名為全局解釋器鎖(global interpreter lock,GIL)的特性,Python的標(biāo)準(zhǔn)版本并沒有按照多內(nèi)核來進(jìn)行設(shè)計(jì)。詳情請(qǐng)查看David Beazley、Larry Hastings等人關(guān)于GIL的討論視頻,或者訪問Python wiki里的GIL頁面。盡管用Python可以運(yùn)行并發(fā)進(jìn)程,但如果需要“開箱即用”的并發(fā)能力,Python可能并不合適。

主站蜘蛛池模板: 明光市| 汾阳市| 呈贡县| 木里| 洪洞县| 康平县| 朝阳区| 石狮市| 铜鼓县| 许昌县| 英超| 宁明县| 沁水县| 射洪县| 枣阳市| 庐江县| 平昌县| 长宁县| 威远县| 黑河市| 鄂托克前旗| 彭山县| 福清市| 松溪县| 福鼎市| 屏东县| 中方县| 秀山| 江永县| 昌黎县| 加查县| 广宁县| 灌云县| 伊宁市| 内乡县| 丹寨县| 齐齐哈尔市| 崇信县| 阳江市| 南涧| 项城市|