相傳在上古時(shí)期,混沌未分,鴻蒙初現(xiàn),天地間產(chǎn)生十件威力無比的神器,分別是:東皇鐘、軒轅劍、盤古斧、煉妖壺、昊天塔、伏羲琴、神農(nóng)鼎、崆峒印、昆侖鏡、女媧石。十大神器各自擁有不同的特點(diǎn),只有大功德,大智慧的人才可得之。
那么在我們的Python中,也存在十大神器,它們有的像盤古斧那樣穿梭太虛,有的像昊天塔那樣吸星換月,還有的如神農(nóng)鼎,熬煉草藥,化腐朽為神奇...
在正式開始之前,我們需要先介紹一個(gè)Python這個(gè)世界的起源和它的優(yōu)缺點(diǎn),以及未來的主要方向,然后我們就會(huì)揭開Python十大神器的神秘面紗,如果你想知道Python中哪個(gè)庫代表著無堅(jiān)不摧的軒轅劍,哪個(gè)代表穿梭太虛的盤古斧,那就關(guān)注我的慕課賬號(hào)(這個(gè)廣告打的可以),以便看到我的最新動(dòng)態(tài)~
Python是1989年的圣誕節(jié)期間,我們的龜叔,為了打發(fā)無聊的時(shí)間而開發(fā)的一個(gè)編程語言,但是另龜叔萬萬沒想到的是,Python誕生以后,它簡潔的語法,強(qiáng)大的功能和學(xué)習(xí)的簡單,立刻受到了全球開發(fā)者的青睞,在TIOBE最新的2016年6月出具的一份全球編程語言排行榜中,Python已經(jīng)超越了PHP和C#成為排行第四的最受歡迎的編程語言,僅次于JAVA和C/C++。

并且Python目前的就業(yè)環(huán)境非常的好,它在數(shù)據(jù)采集和數(shù)據(jù)分析上出色的能力和強(qiáng)大的第三方庫,有如當(dāng)年互聯(lián)網(wǎng)造就了Java一樣,Python是否能否應(yīng)運(yùn)成為下一個(gè)Java我們不得而知,但是可以肯定的是,已經(jīng)有越來越多的人被Python的簡潔和開箱即用的特點(diǎn)所吸引。而目前Python工程師的數(shù)量還很少,就業(yè)競爭壓力不像Java那么大,往往Java一個(gè)職位同時(shí)有十幾個(gè)人競爭。
那么我們來總結(jié)一下Python的優(yōu)點(diǎn):
1.語法簡潔。Python去掉了傳統(tǒng)C++或Java使用大括號(hào)來區(qū)分一個(gè)方法體或者類的形式,而是采用相同的縮進(jìn)來表示一個(gè)類或者一個(gè)方法的有效范圍。這強(qiáng)制性的使每個(gè)程序員都必須按照這種風(fēng)格書寫,而不會(huì)出現(xiàn)Java程序員喜歡左大括號(hào)跟在方法名后面,C++的程序員喜歡左大括號(hào)另起一行這種書寫風(fēng)格,也不會(huì)導(dǎo)致學(xué)習(xí)C++的程序員學(xué)習(xí)Java以后還保持C++的書寫風(fēng)格使得Java程序員感覺很怪異,也不會(huì)有if else后面不跟大括號(hào)的行為,讓人難以看懂里面的代碼邏輯,這些在Python中統(tǒng)統(tǒng)不存在。
2.開箱即用。無論是Java還是C/C++,它的安裝和使用往往都是讓人很費(fèi)解的,特別是新手在學(xué)習(xí)的時(shí)候,相信大家都有被Java環(huán)境變量折磨的經(jīng)歷。Python不存在這種問題,只需要去Python的官網(wǎng),下載最新版的Python,雙擊運(yùn)行,安裝的時(shí)候選擇把Python加入系統(tǒng)環(huán)境變量中,它就會(huì)自動(dòng)完成這一切。
3.海納百川。學(xué)習(xí)過Java的同學(xué)肯定知道,Java一個(gè)很大的優(yōu)勢就是第三方的jar包非常多,但是這和Python比起來,簡直是滄海一粟,Python擁有數(shù)不盡的第三方庫。可以這么說,任何你能想到的,能夠使用編程語言實(shí)現(xiàn)的功能,Python都擁有已經(jīng)實(shí)現(xiàn)了這些功能的第三方庫,你只需要安裝它就可以了。
4.什么叫包依賴?Java雖然擁有第三方的jar包,甚至還有spring這樣逆天的超級(jí)框架,而且還有Apache這樣的第三方組織不斷的發(fā)展壯大它,可以說Java的親爹sun以及后爸Oracle對(duì)于Java的貢獻(xiàn)都不及Apache。Java能有今天的地位,和Apache是分不開的,當(dāng)然這其中自然和Java本身在服務(wù)器上出色的能力分不開的,爛泥是扶不上墻的,如果Java本身不行,無論是誰也無法讓它這么的流行和受歡迎。但是Java有一個(gè)令人非常頭疼的事情,那就是各種的jar包他們之間的依賴關(guān)系,而且每個(gè)項(xiàng)目都需要自己手動(dòng)去導(dǎo)包,可能有人會(huì)跟我說有maven啊,沒錯(cuò),今天的Java程序員可以輕松的在Apache的maven主頁下載到maven,通過填寫配置文件來解決這一問題。但是,還需要寫配置文件。Python就不存在這種問題了,通過pip install 庫名,Python就會(huì)自動(dòng)把需要的文件以及依賴的文件,自動(dòng)安裝到本地,在項(xiàng)目中使用import命令就可以引入,不需要自己把庫文件放在項(xiàng)目的路徑里面。而且Python的包管理工具會(huì)自動(dòng)的幫我們管理他們之前的依賴關(guān)系,不會(huì)出現(xiàn)重復(fù)安裝的問題。
Python這么吊,它家里人知道嗎?這么完美還學(xué)什么其他語言,干脆都去學(xué)習(xí)Python算了,事實(shí)上不是這樣的,Python有很多不如其它語言的地方。
那么我們來看一下它的缺點(diǎn):
1.運(yùn)行速度慢。這是Python的硬傷,作為解釋型的腳本語言,Python的運(yùn)行速度不要說和C/C++比,就是和Java比差的遠(yuǎn)。事實(shí)上Java8的虛擬機(jī),如今的運(yùn)行速度已經(jīng)和C/C++不相上下,國外有人使用Java制作大型的3D游戲,畢竟如今的CPU執(zhí)行能力已經(jīng)相當(dāng)?shù)目植懒?,真正的性能瓶頸在于磁盤IO,以及網(wǎng)絡(luò)的帶寬。那么這個(gè)缺點(diǎn)重要嗎,我們首先來看一下Python的主要應(yīng)用場景就是在于網(wǎng)絡(luò)采集和數(shù)據(jù)分析,以及網(wǎng)站后臺(tái)上面。我們以網(wǎng)絡(luò)為例,假設(shè)一個(gè)網(wǎng)站他的后臺(tái)用的是Java而另一個(gè)用的是Python,而他們的前臺(tái)頁面完全相同。由于網(wǎng)絡(luò)的傳輸,用戶打開這個(gè)網(wǎng)站下載圖片,JS,CSS,HTML,需要耗費(fèi)一秒。Java虛擬機(jī)在10毫秒內(nèi)完成了這一切,用戶打開網(wǎng)站一共等待了1.01秒。而Python使用了100毫秒去完成這一切,用戶打開網(wǎng)站一共等待了1.1秒。對(duì)于用戶來說,1.01秒和1.1秒沒有任何的區(qū)別。
2.代碼不能加密。我們都知道Java的代碼可以被編譯成字節(jié)碼文件,然后放在服務(wù)器上面運(yùn)行,也就是說,我制作一個(gè)Java程序,我想給別人使用,我就可以把字節(jié)碼文件發(fā)給他。對(duì)方能夠正常使用,但是并不能知道我的源代碼。而Python的程序文件就是它的源文件,所以Python的程序想要給別人運(yùn)行,必須要給別人源代碼。那么現(xiàn)在是一個(gè)開源的時(shí)代,連.NET都開源了,你還怕什么?
3.服務(wù)器集群。Java有很多成熟的服務(wù)器集群的方案,然而Python由于近幾年才在國內(nèi)流行起來,國內(nèi)使用Python做后臺(tái)的大網(wǎng)站,只有眾所周知的豆瓣,可想而知,使用Java在集群時(shí)遇到一些問題可以很輕松的找到解決方案,而Python可能就需要依賴國外的大神了。
操作系統(tǒng)和大型3D。Python是做不了操作系統(tǒng)和大型的3D應(yīng)用的,它的運(yùn)行速度決定了,Python目前和這個(gè)行業(yè)是無緣的,操作系統(tǒng)還是適合用C或者C++這些來寫。
所以,正如我們擁有走路、自行車、公交、地鐵、汽車、輪船、火車、高鐵、飛機(jī)這些交通工具一樣,我們不會(huì)因?yàn)橛辛孙w機(jī)就不走路或者不坐公交地鐵。雖然飛機(jī)的速度快,安全性好,但是飛機(jī)需要的起飛和降落平臺(tái)太大,成本高,不會(huì)有人從家去超市這段距離去坐飛機(jī)的。
正如交通工具一樣,編程語言各有所長,Python的誕生就是為了解決其他編程語言的不足之處的,但是Python不可能取代Java,Java也取代不了Python。正是這些一個(gè)一個(gè)的編程語言,才帶給我們程序世界絢爛多姿的色彩,才能讓我們?cè)谶M(jìn)行一個(gè)項(xiàng)目時(shí)選擇最合適的方案。
十大神器,有緣者得之,接下來我們就一起領(lǐng)略一下Python中十大神器的威力。
作者: 秋名山車神
鏈接:http://www.imooc.com/article/9837