1.1 Python的起源
Python的創始人為Guido van Rossum(後文簡稱Guido)。1982年,Guido從阿姆斯特丹大學獲得數學和計算機碩士學位。儘管Guido算得上是一位數學家,不過他更享受計算機帶來的樂趣。用Guido的話說,儘管他擁有數學和計算機雙料資質,不過他趨向於做計算機相關的工作,並熱衷於做所有和程式設計相關的活兒。
Guido接觸並使用過Pascal、C、Fortran等語言。這些語言的基本設計原則是讓機器執行得更快。在20世紀80年代,雖然IBM和蘋果已經掀起了個人電腦浪潮,但是那時候個人電腦的配置很低,比如早期的Macintosh只有8MHz的CPU主頻和128KB的RAM,一個大的陣列就能佔滿記憶體,因此所有編譯器的核心都是做最佳化,以便讓程式能夠執行。為了提高效率,程式設計師不得不像計算機一樣思考,以便寫出更符合機器口味的程式,在那個時代,程式設計師恨不得榨取計算機每一寸的能力,有人甚至認為C語言的指標是在浪費記憶體。至於動態型別、記憶體自動管理、物件導向等就不要想了,這些只會讓你的電腦陷入癱瘓。
這種程式設計方式讓Guido感到苦惱。雖然Guido知道如何用C語言寫出一個功能,但整個編寫過程卻需要耗費大量時間。Guido還可以選擇Shell,Bourne Shell作為UNIX系統的直譯器已經存在很久了。UNIX的管理員常常用Shell寫一些簡單的指令碼,以進行系統維護的工作,比如定期備份、檔案系統管理等。在C語言中,許多上百行的程式在Shell中只用幾行就可以完成。然而,Shell的本質是呼叫命令,它不是一個真正的語言,比如shell沒有數值型的資料型別,運用加法運算都很複雜。總之,Shell不能全面調動計算機的功能。
Guido希望有一種語言能夠像C語言一樣全面呼叫計算機的功能介面,又可以像Shell一樣輕鬆程式設計。ABC語言讓Guido看到了希望,該語言是由荷蘭的數學和計算機研究所開發的,Guido曾經在該研究所工作,並參與了ABC語言的開發。與當時大部分語言不同,ABC語言是以教學為目的,目標是“讓使用者感覺更好”,希望透過ABC語言讓語言變得容易閱讀、容易使用、容易記憶、容易學習,並以此激發人們學習程式設計的興趣。
ABC語言儘管已經具備了良好的可讀性和易用性,不過始終沒有流行起來。當時,ABC語言編譯器需要配置比較高的電腦才能執行,而這些電腦的使用者通常精通計算機,他們考慮更多的是程式的效率,而不是學習難度。ABC語言不能直接操作檔案系統,儘管使用者可以透過文字流等方式匯入資料,不過ABC無法直接讀寫檔案。輸入輸出的困難對於計算機語言來說是致命的。你能想象一款打不開車門的跑車嗎?
1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字來自於Guido所摯愛的電視劇——Monty Python’s Flying Circus。他希望這個新語言Python能夠符合他的理想:創造一種介於C和Shell之間,功能全面、易學易用、可擴充的語言。Guido作為一個語言設計愛好者,已經嘗試過設計語言,這次不過是一種純粹的hacking行為。
1991年,第一個Python編譯器誕生。該編譯器是用C語言實現的,並且能夠呼叫C語言的庫檔案。Python誕生時便具有類、函式、異常處理、包含表和詞典在內的核心資料型別以及模組為基礎的擴充系統。
Python的很多語法來自於C,卻又受ABC語言的強烈影響。來自ABC語言的一些規定至今還富有爭議(比如強制縮排),不過這些語法規定讓Python容易理解。另一方面,Guido聰明地選擇讓Python服從一些慣例,特別是C語言的慣例,比如迴歸等號賦值。Guido認為“常識”確定的東西沒有必要過度糾結。
Python從一開始就特別在意可擴充性。Python可以在多個層次上擴充,在高層可以直接引入.py檔案,在底層可以引用C語言的庫。程式設計師可以使用Python快速編寫的.py檔案作為擴充模組。當效能是重點考慮的因素時,程式設計師可以深入底層寫C程式,將編譯的.so檔案引入Python中使用。Python就像使用鋼筋建房一樣,要先規定好大的框架。程式設計師可以在此框架下相當自由地擴充或更改。
最初,Python完全由Guido本人開發,後來逐漸受到Guido同事的歡迎,他們迅速反饋使用意見,並參與Python的改進。Guido和一些同事構成了Python的核心團隊,他們將自己大部分業餘時間用於hack Python, Python逐漸擴充到了研究所外。Python將許多機器層面的細節隱藏交給編譯器處理,並凸顯邏輯層面的程式設計思考,程式設計師使用Python時可以將更多時間用於程式邏輯的思考,而不是具體細節的實現,這一特徵吸引了廣大程式設計師。Python開始流行起來了。