我們專(zhuān)注於高端品牌網(wǎng)站創(chuàng)意設(shè)計(jì)與開(kāi)發(fā)
許許多多的人(包括我自己)都很容易愛(ài)上Python這門(mén)語言。自從1991年誕生以來(lái),Python現(xiàn)在已經(jīng)成為最受歡迎的動(dòng)態(tài)程式語言之一,其他還有Perl、Ruby等。由於擁有大量的Web框架(比如Rails(Ruby)和Django(Python)),最近幾年非常流行使用Python和Ruby進(jìn)行網(wǎng)站建設(shè)工作。這些語言常被稱(chēng)作腳本(scripting)語言,因為它們可以用於編寫(xiě)簡(jiǎn)短而粗糙的小程序(也就是腳本)。我個(gè)人並不喜歡「腳本語言」這個(gè)術(shù)語,因為它好像在說(shuō)這些語言無(wú)法用於構(gòu)建嚴(yán)謹(jǐn)的軟體。在眾多解釋型語言中,Python最大的特點(diǎn)是擁有一個(gè)巨大而活躍的科學(xué)計(jì)算(scientific comp...
在數(shù)據(jù)分析和交互、探索性計(jì)算以及數(shù)據(jù)可視化等方面,Python將不可避免地接近於其他開(kāi)源和商業(yè)的領(lǐng)域特定程式語言/工具,如R、MATLAB、SAS、StataR、MATLAB、SAS、Stata等。近年來(lái),由於Python有不斷改良的庫(kù)(主要是pandas),使其成為數(shù)據(jù)處理任務(wù)的一大替代方案。結(jié)合其在通用編程方面的強(qiáng)大實(shí)力,我們完全可以只使用Python這一種語言去構(gòu)建以數(shù)據(jù)為中心的應(yīng)用程式。
把Python當(dāng)做粘合劑
作為一個(gè)科學(xué)計(jì)算平臺(tái),Python的成功部分源於其能夠輕鬆地集成C、C++以及Fortran代碼。大部分現(xiàn)代計(jì)算環(huán)境都利用了一些Fortran和C庫(kù)來(lái)實(shí)現(xiàn)線(xiàn)性代數(shù)、優(yōu)選、積分、快速傅立葉變換(huàn)以及其他諸如此類(lèi)的算法。許多企業(yè)和國(guó)家實(shí)驗(yàn)室也利用Python來(lái)「粘合」那些已經(jīng)用了30多年的遺留軟體系統(tǒng)。
大多數(shù)軟體都是由兩(liǎng)部分代碼組成的:少量需要佔用大部分執(zhí)行時(shí)間的代碼,以及大量不經(jīng)常執(zhí)行的「粘合劑代碼」。粘合劑代碼的執(zhí)行時(shí)間通常是微不足道的。開(kāi)發(fā)人員的精力幾乎都是花在優(yōu)化計(jì)算瓶頸上面的,有時(shí)更是直接轉(zhuǎn)用更低級(jí)的語言(比如C)。
最近這幾年,Cython項(xiàng)目(http://cython.org)已經(jīng)成為Python領(lǐng)域中創(chuàng)建編譯型擴展以及對(duì)接C/C++代碼的一大途徑。
解決「兩(liǎng)種語言」問(wèn)題
很多組織通常都會(huì)用一種類(lèi)似於領(lǐng)域特定的計(jì)算語言(如MATLAB和R)對(duì)新的想法進(jìn)行研究、原型構(gòu)建和測(cè)試,然後再將這些想法移植到某個(gè)更大的生產(chǎn)系統(tǒng)中去(可能是用Java、C#或C++編寫(xiě)的)。人們逐漸意識到,Python不僅適用於研究和原型構(gòu)建,同時(shí)也適用於構(gòu)建生產(chǎn)系統(tǒng)。我相信越來(lái)越多的企業(yè)也會(huì)這樣看,因為研究人員和工程技術(shù)人員使用同一種編程工具將會(huì)給企業(yè)帶來(lái)非常顯著的組織效益。
為什麼不選Python
雖然Python非常適合構(gòu)建計(jì)算密集型科學(xué)應(yīng)用程式以及幾乎各種各樣的通用系統(tǒng),但它對(duì)於不少應(yīng)用場(chǎng)景仍然力有不逮。
由於Python是一種解釋型程式語言,因此大部分Python代碼都要比用編譯型語言(比如Java和C++)編寫(xiě)的代碼運(yùn)行慢得多。由於程式設(shè)計(jì)師的時(shí)間通常都比CPU時(shí)間值錢,因此許多人也願意在這裡做一些權(quán)衡。但是,在那些要求延遲非常小的應(yīng)用程式中(例如高頻交易系統(tǒng)),為了盡最大可能地優(yōu)化性能,耗費(fèi)時(shí)間使用諸如C++這樣更低級(jí)、更低生產(chǎn)率的語言進(jìn)行編程也是值得的。
對(duì)於高並發(fā)、多線(xiàn)程的應(yīng)用程式而言(尤其是擁有許多計(jì)算密集型線(xiàn)程的應(yīng)用程式),Python並不是一種理想的程式語言。這是因為Python有一個(gè)叫做全局解釋器鎖(Global Interpreter Lock,GIL)的東西,這是一種防止解釋器同時(shí)執(zhí)行多條Python字節(jié)碼指令的機(jī)制。有關(guān)「為什麼會(huì)存在GIL」的技術(shù)性原因超出了本書(shū)的範圍,但是就目前來(lái)看,GIL並不會(huì)在短時(shí)間內(nèi)消失。雖然很多大數(shù)據(jù)處理應(yīng)用程式為了能在較短的時(shí)間內(nèi)完成數(shù)據(jù)集的處理工作都需要運(yùn)行在計(jì)算機(jī)集群上,但是仍然有一些情況需要用單進(jìn)程多線(xiàn)程系統(tǒng)來(lái)解決。
這並不是說(shuō)Python不能執(zhí)行真正的多線(xiàn)程並行代碼,只不過(guò)這些代碼不能在單個(gè)Python進(jìn)程中執(zhí)行而已。比如說(shuō),Cython項(xiàng)目可以集成OpenMP(一個(gè)用於並行計(jì)算的C框架)以實(shí)現(xiàn)並行處理循環(huán)進(jìn)而大幅度提高數(shù)值算法的速度。
文章引用:http://www.szymweb.com/new/158.html
本站文章為深圳網(wǎng)站建設(shè)·源美網(wǎng)絡(luò)原創(chuàng)策劃(huà),如有版權(quán)糾紛或者違規(guī)問(wèn)題,請聯(lián)繫我們刪除,謝謝!
售後保障
承諾任何問(wèn)題1小時(shí)內(nèi)解決數(shù)據(jù)備份
更安全、更高效、更穩(wěn)定價(jià)格公道精準(zhǔn)
項(xiàng)目經(jīng)理精準(zhǔn)報(bào)價(jià)不弄虛作假合作無(wú)風(fēng)險(xiǎn)
重合同講信譽(yù),無(wú)效全額退款