Python編程語言是我喜歡的語言凌盯,簡潔、優(yōu)美烹玉、易用驰怎。前兩天,我很激昂地向朋友宣傳Python的好處二打。
“好吧县忌,我承認(rèn)Python不錯,但它為什么叫Python呢继效?”
“呃症杏,似乎是一個電視劇的名字∪鹦牛”
“那你說的Guido是美國人么厉颤?”
“他從Google換到Dropbox工作,但他的名字像是荷蘭人的喧伞∽哂螅”
“你確定你很熟悉Python嗎绩郎?”
所以為了雪恥潘鲫,我花時間調(diào)查了Python的歷史。我看到了Python中許多功能的來源和Python的設(shè)計理念肋杖,看到了一門編程語言的演化歷史溉仑,看到了Python與開源運動的奇妙聯(lián)系。從Python的歷史中状植,我們可以一窺開源開發(fā)的理念和成就浊竟。
這也可以作為我寫的Python快速教程的序篇怨喘。
起源
Python的作者,Guido von Rossum振定,確實是荷蘭人必怜。1982年,Guido從阿姆斯特丹大學(xué)獲得了數(shù)學(xué)和計算機碩士學(xué)位后频。然而梳庆,盡管他算得上是一位數(shù)學(xué)家,但他更加享受計算機帶來的樂趣卑惜。用他的話說膏执,盡管擁有數(shù)學(xué)和計算機雙料資質(zhì),他總趨向于做計算機相關(guān)的工作露久,并熱衷于做任何和編程相關(guān)的活兒更米。最后,如果你的時間不是很緊張毫痕,并且又想快速的提高征峦,最重要的是不怕吃苦,建議你可以價位@762459510 消请,那個真的很不錯眶痰,很多人進步都很快,需要你不怕吃苦哦梯啤!大家可以去添加上看一下~
在那個時候竖伯,Guido接觸并使用過諸如Pascal、C因宇、 Fortran等語言七婴。這些語言的基本設(shè)計原則是讓機器能更快運行。在80年代察滑,雖然IBM和蘋果已經(jīng)掀起了個人電腦浪潮打厘,但這些個人電腦的配置很低。比如早期的Macintosh贺辰,只有8MHz的CPU主頻和128KB的RAM户盯,一個大的數(shù)組就能占滿內(nèi)存。所有的編譯器的核心是做優(yōu)化饲化,以便讓程序能夠運行莽鸭。為了增進效率,語言也迫使程序員像計算機一樣思考吃靠,以便能寫出更符合機器口味的程序硫眨。在那個時代,程序員恨不得用手榨取計算機每一寸的能力巢块。有人甚至認(rèn)為C語言的指針是在浪費內(nèi)存礁阁。至于動態(tài)類型巧号,內(nèi)存自動管理,面向?qū)ο蟆?別想了姥闭,那會讓你的電腦陷入癱瘓朦佩。
這種編程方式讓Guido感到苦惱窒朋。Guido知道如何用C語言寫出一個功能,但整個編寫過程需要耗費大量的時間,即使他已經(jīng)準(zhǔn)確的知道了如何實現(xiàn)莱坎。他的另一個選擇是shell银亲。Bourne Shell作為UNIX系統(tǒng)的解釋器已經(jīng)長期存在眼滤。UNIX的管理員們常常用shell去寫一些簡單的腳本寺渗,以進行一些系統(tǒng)維護的工作,比如定期備份疼进、文件系統(tǒng)管理等等薪缆。shell可以像膠水一樣,將UNIX下的許多功能連接在一起伞广。許多C語言下上百行的程序拣帽,在shell下只用幾行就可以完成。然而嚼锄,shell的本質(zhì)是調(diào)用命令减拭。它并不是一個真正的語言。比如說区丑,shell沒有數(shù)值型的數(shù)據(jù)類型拧粪,加法運算都很復(fù)雜〔捉模總之可霎,shell不能全面的調(diào)動計算機的功能。
Guido希望有一種語言宴杀,這種語言能夠像C語言那樣癣朗,能夠全面調(diào)用計算機的功能接口,又可以像shell那樣旺罢,可以輕松的編程旷余。ABC語言讓Guido看到希望。ABC是由荷蘭的數(shù)學(xué)和計算機研究所開發(fā)的扁达。Guido在該研究所工作正卧,并參與到ABC語言的開發(fā)。ABC語言以教學(xué)為目的罩驻。與當(dāng)時的大部分語言不同穗酥,ABC語言的目標(biāo)是“讓用戶感覺更好”。ABC語言希望讓語言變得容易閱讀惠遏,容易使用砾跃,容易記憶,容易學(xué)習(xí)节吮,并以此來激發(fā)人們學(xué)習(xí)編程的興趣抽高。比如下面是一段來自Wikipedia的ABC程序,這個程序用于統(tǒng)計文本中出現(xiàn)的詞的總數(shù):
HOW TO RETURN words document:
PUT {} IN collection
FOR line IN document:
FOR word IN split line:
IF word not.in collection:
INSERT word IN collection
RETURN collection
HOW TO用于定義一個函數(shù)透绩。一個Python程序員應(yīng)該很容易理解這段程序翘骂。ABC語言使用冒號和縮進來表示程序塊。行尾沒有分號帚豪。for和if結(jié)構(gòu)中也沒有括號()碳竟。賦值采用的是PUT,而不是更常見的等號狸臣。這些改動讓ABC程序讀起來像一段文字莹桅。最后,如果你的時間不是很緊張烛亦,并且又想快速的提高诈泼,最重要的是不怕吃苦,建議你可以價位@762459510 煤禽,那個真的很不錯铐达,很多人進步都很快,需要你不怕吃苦哦檬果!大家可以去添加上看一下~
盡管已經(jīng)具備了良好的可讀性和易用性瓮孙,ABC語言最終沒有流行起來。在當(dāng)時选脊,ABC語言編譯器需要比較高配置的電腦才能運行衷畦。而這些電腦的使用者通常精通計算機,他們更多考慮程序的效率知牌,而非它的學(xué)習(xí)難度祈争。除了硬件上的困難外,ABC語言的設(shè)計也存在一些致命的問題:
可拓展性差角寸。ABC語言不是模塊化語言菩混。如果想在ABC語言中增加功能,比如對圖形化的支持扁藕,就必須改動很多地方沮峡。
不能直接進行IO。ABC語言不能直接操作文件系統(tǒng)亿柑。盡管你可以通過諸如文本流的方式導(dǎo)入數(shù)據(jù)邢疙,但ABC無法直接讀寫文件。輸入輸出的困難對于計算機語言來說是致命的。你能想像一個打不開車門的跑車么疟游?
過度革新呼畸。ABC用自然語言的方式來表達程序的意義,比如上面程序中的HOW TO 颁虐。然而對于程序員來說蛮原,他們更習(xí)慣用function或者define來定義一個函數(shù)。同樣另绩,程序員更習(xí)慣用等號來分配變量儒陨。盡管ABC語言很特別,但學(xué)習(xí)難度也很大笋籽。
傳播困難蹦漠。ABC編譯器很大,必須被保存在磁帶上车海。當(dāng)時Guido在訪問的時候笛园,就必須有一個大磁帶來給別人安裝ABC編譯器。 這樣容劳,ABC語言就很難快速傳播喘沿。
1989年,為了打發(fā)圣誕節(jié)假期竭贩,Guido開始寫Python語言的編譯器蚜印。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus留量。他希望這個新的叫做Python的語言窄赋,能符合他的理想:創(chuàng)造一種C和shell之間,功能全面楼熄,易學(xué)易用忆绰,可拓展的語言。Guido作為一個語言設(shè)計愛好者可岂,已經(jīng)有過設(shè)計語言的嘗試错敢。這一次,也不過是一次純粹的hacking行為缕粹。
一門語言的誕生
1991年稚茅,第一個Python編譯器誕生。它是用C語言實現(xiàn)的平斩,并能夠調(diào)用C語言的庫文件亚享。從一出生,Python已經(jīng)具有了:類绘面,函數(shù)欺税,異常處理侈沪,包含表和詞典在內(nèi)的核心數(shù)據(jù)類型,以及模塊為基礎(chǔ)的拓展系統(tǒng)晚凿。
Python語法很多來自C亭罪,但又受到ABC語言的強烈影響。來自ABC語言的一些規(guī)定直到今天還富有爭議晃虫,比如強制縮進皆撩。但這些語法規(guī)定讓Python容易讀扣墩。另一方面哲银,Python聰明的選擇服從一些慣例,特別是C語言的慣例呻惕,比如回歸等號賦值荆责。Guido認(rèn)為,如果“常識”上確立的東西亚脆,沒有必要過度糾結(jié)做院。
Python從一開始就特別在意可拓展性。Python可以在多個層次上拓展濒持。從高層上键耕,你可以直接引入.py文件。在底層柑营,你可以引用C語言的庫屈雄。Python程序員可以快速的使用Python寫.py文件作為拓展模塊。但當(dāng)性能是考慮的重要因素時官套,Python程序員可以深入底層酒奶,寫C程序,編譯為.so文件引入到Python中使用奶赔。Python就好像是使用鋼構(gòu)建房一樣惋嚎,先規(guī)定好大的框架。而程序員可以在此框架下相當(dāng)自由的拓展或更改站刑。最后另伍,如果你的時間不是很緊張,并且又想快速的提高绞旅,最重要的是不怕吃苦摆尝,建議你可以價位@762459510 ,那個真的很不錯玻靡,很多人進步都很快结榄,需要你不怕吃苦哦!大家可以去添加上看一下~
最初的Python完全由Guido本人開發(fā)囤捻。Python得到Guido同事的歡迎臼朗。他們迅速的反饋使用意見,并參與到Python的改進。Guido和一些同事構(gòu)成Python的核心團隊视哑。他們將自己大部分的業(yè)余時間用于hack Python绣否。隨后,Python拓展到研究所之外挡毅。Python將許多機器層面上的細節(jié)隱藏蒜撮,交給編譯器處理,并凸顯出邏輯層面的編程思考跪呈。Python程序員可以花更多的時間用于思考程序的邏輯段磨,而不是具體的實現(xiàn)細節(jié)。這一特征吸引了廣大的程序員耗绿。Python開始流行苹支。
人生苦短,我用python
時勢造英雄
我們不得不暫停我們的Python時間误阻,轉(zhuǎn)而看一看瞬息萬變的計算機行業(yè)债蜜。1990年代初,個人計算機開始進入普通家庭究反。Intel發(fā)布了486處理器寻定,windows發(fā)布window 3.0開始的一系列視窗系統(tǒng)。計算機的性能大大提高精耐。程序員開始關(guān)注計算機的易用性 狼速,比如圖形化界面。
Windows 3.0
由于計算機性能的提高黍氮,軟件的世界也開始隨之改變唐含。硬件足以滿足許多個人電腦的需要。硬件廠商甚至渴望高需求軟件的出現(xiàn)沫浆,以帶動硬件的更新?lián)Q代捷枯。C++和Java相繼流行。C++和Java提供了面向?qū)ο蟮木幊谭妒阶ㄖ矗约柏S富的對象庫淮捆。在犧牲了一定的性能的代價下,C++和Java大大提高了程序的產(chǎn)量本股。語言的易用性被提到一個新的高度攀痊。我們還記得,ABC失敗的一個重要原因是硬件的性能限制拄显。從這方面說苟径,Python要比ABC幸運許多。
另一個悄然發(fā)生的改變是Internet躬审。1990年代還是個人電腦的時代棘街,windows和Intel挾PC以令天下蟆盐,盛極一時。盡管Internet為主體的信息革命尚未到來遭殉,但許多程序員以及資深計算機用戶已經(jīng)在頻繁使用Internet進行交流石挂,比如使用email和newsgroup。Internet讓信息交流成本大大下降险污。一種新的軟件開發(fā)模式開始流行:開源痹愚。程序員利用業(yè)余時間進行軟件開發(fā),并開放源代碼蛔糯。1991年拯腮,Linus在comp.os.minix新聞組上發(fā)布了Linux內(nèi)核源代碼,吸引大批hacker的加入渤闷。Linux和GNU相互合作疾瓮,最終構(gòu)成了一個充滿活力的開源平臺脖镀。
硬件性能不是瓶頸飒箭,Python又容易使用,所以許多人開始轉(zhuǎn)向Python蜒灰。Guido維護了一個maillist弦蹂,Python用戶就通過郵件進行交流。Python用戶來自許多領(lǐng)域强窖,有不同的背景凸椿,對Python也有不同的需求。Python相當(dāng)?shù)拈_放翅溺,又容易拓展脑漫,所以當(dāng)用戶不滿足于現(xiàn)有功能,很容易對Python進行拓展或改造咙崎。隨后优幸,這些用戶將改動發(fā)給Guido,并由Guido決定是否將新的特征加入到Python或者標(biāo)準(zhǔn)庫中褪猛。如果代碼能被納入Python自身或者標(biāo)準(zhǔn)庫网杆,這將極大的榮譽。由于Guido至高無上的決定權(quán)伊滋,他因此被稱為“終身的仁慈獨裁者”碳却。
Python被稱為“Battery Included”,是說它以及其標(biāo)準(zhǔn)庫的功能強大笑旺。這些是整個社區(qū)的貢獻昼浦。Python的開發(fā)者來自不同領(lǐng)域,他們將不同領(lǐng)域的優(yōu)點帶給Python筒主。比如Python標(biāo)準(zhǔn)庫中的正則表達是參考Perl关噪,而lambda, map, filter, reduce等函數(shù)參考了Lisp迷帜。Python本身的一些功能以及大部分的標(biāo)準(zhǔn)庫來自于社區(qū)。Python的社區(qū)不斷擴大色洞,進而擁有了自己的newsgroup戏锹,網(wǎng)站,以及基金火诸。從Python 2.0開始锦针,Python也從maillist的開發(fā)方式,轉(zhuǎn)為完全開源的開發(fā)方式置蜀。社區(qū)氣氛已經(jīng)形成奈搜,工作被整個社區(qū)分擔(dān),Python也獲得了更加高速的發(fā)展盯荤。
到今天馋吗,Python的框架已經(jīng)確立。Python語言以對象為核心組織代碼秋秤,支持多種編程范式宏粤,采用動態(tài)類型,自動進行內(nèi)存回收灼卢。Python支持解釋運行绍哎,并能調(diào)用C庫進行拓展。Python有強大的標(biāo)準(zhǔn)庫鞋真。由于標(biāo)準(zhǔn)庫的體系已經(jīng)穩(wěn)定崇堰,所以Python的生態(tài)系統(tǒng)開始拓展到第三方包。這些包涩咖,如Django海诲、web.py、wxpython檩互、numpy特幔、matplotlib、PIL盾似,將Python升級成了物種豐富的熱帶雨林敬辣。
啟示錄
Python崇尚優(yōu)美、清晰零院、簡單溉跃,是一個優(yōu)秀并廣泛使用的語言。Python在TIOBE排行榜中排行第八告抄,它是Google的第三大開發(fā)語言撰茎,Dropbox的基礎(chǔ)語言,豆瓣的服務(wù)器語言打洼。Python的發(fā)展史可以作為一個代表龄糊,帶給我許多啟示逆粹。
在Python的開發(fā)過程中,社區(qū)起到了重要的作用炫惩。Guido自認(rèn)為自己不是全能型的程序員僻弹,所以他只負責(zé)制訂框架。如果問題太復(fù)雜他嚷,他會選擇繞過去蹋绽,也就是cut the corner。這些問題最終由社區(qū)中的其他人解決筋蓖。社區(qū)中的人才是異常豐富的卸耘,就連創(chuàng)建網(wǎng)站,籌集基金這樣與開發(fā)稍遠的事情粘咖,也有人樂意于處理蚣抗。如今的項目開發(fā)越來越復(fù)雜,越來越龐大瓮下,合作以及開放的心態(tài)成為項目最終成功的關(guān)鍵翰铡。
Python從其他語言中學(xué)到了很多,無論是已經(jīng)進入歷史的ABC唱捣,還是依然在使用的C和Perl两蟀,以及許多沒有列出的其他語言≌痃裕可以說,Python的成功代表了它所有借鑒的語言的成功战虏。同樣拣宰,Ruby借鑒了Python,它的成功也代表了Python某些方面的成功烦感。每個語言都是混合體巡社,都有它優(yōu)秀的地方,但也有各種各樣的缺陷手趣。同時晌该,一個語言“好與不好”的評判,往往受制于平臺绿渣、硬件朝群、時代等等外部原因。程序員經(jīng)歷過許多語言之爭中符。其實姜胖,以開放的心態(tài)來接受各個語言,說不定哪一天淀散,程序員也可以如Guido那樣右莱,混合出自己的語言蚜锨。
無論Python未來的命運如何,Python的歷史已經(jīng)是本很有趣的小說慢蜓。