注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請開啟 JavaScript 以獲得完整的體驗。

《Python程式設計》(第1版)前言

《Python程式設計》(第1版)前言


這是我為Mark Lutz的著作《Python程式設計》(第1版)撰寫的前言,該書由O'Reilly出版。另請參閱我為第2版撰寫的前言

作為Python的創造者,我想就它的起源說幾句,並補充一些個人理念。

六年多前,在1989年12月,我正在尋找一個“業餘”程式設計專案,以在聖誕節前後的一週裡打發時間。我的辦公室(阿姆斯特丹的一家政府研究實驗室)會關閉,但我有一臺家用電腦,而且手上也沒什麼別的事。我決定為我最近一直在構思的新指令碼語言編寫一個直譯器:它是ABC語言的後代,希望能吸引Unix/C程式設計師。我選擇Python作為專案的暫定名稱,當時我有點玩世不恭(並且是Monty Python's Flying Circus的忠實粉絲)。

今天,我可以肯定地說Python改變了我的生活。我搬到了另一個大陸。我的工作日都花在用Python開發大型系統上,如果不是在黑Python或回答Python相關的電子郵件的話。現在有了Python T恤、研討會、郵件列表、新聞組,以及這本書。坦白說,我唯一未實現的願望是我的照片能登上《紐約時報》的頭版。但在我開始白日夢之前,這裡有一些Python過去的趣聞。

一切都始於ABC,這是一種我在八十年代初協助建立的出色的教學語言。它是一種極其優雅而強大的語言,旨在服務非專業程式設計師。儘管它擁有所有的優雅和強大,並且提供了免費的實現,但ABC在Unix/C世界中從未流行起來。我只能猜測原因,但一個可能的理由是:給ABC新增新的“原始”操作很困難。它是一個龐大、"封閉的系統",只有最基本的I/O操作:從控制檯讀取字串,向控制檯寫入字串。我決定不在Python中重蹈覆轍。

除了這個意圖,我還有許多其他改進ABC的想法,並且渴望嘗試。例如,ABC強大的資料型別結果比我們預期的效率要低。它過分強調理論上最優的演算法,而對常見情況的最佳化不足。我還覺得ABC的一些旨在初學者使用的特性,對於(當時!)預期的有經驗的Unix/C程式設計師受眾來說,就不那麼可取了。例如:ABC獨特的語法(所有關鍵字都大寫!);一些術語(例如,“how-to”而不是“procedure”);以及其使用者幾乎普遍討厭的整合結構化編輯器。Python將更多地依賴Unix基礎設施和慣例,但不受Unix限制。事實上,第一個實現在Mac上完成。

事實證明,Python顯著地擺脫了許多傳統程式語言的束縛。這可能歸因於我的選擇:除了ABC,我的主要影響是Modula-3。這是另一種具有卓越優雅和力量的語言,由一個小型、意志堅定的團隊設計(其中大部分是我在DEC位於帕洛阿爾託的系統研究中心實習期間遇到的)。想象一下,如果我以Unix shell和C為模型設計Python,它會是什麼樣子!(是的,我也借鑑了C,但只借鑑了其最不具爭議的特性,以滿足Unix/C受眾。)

任何個人創作都有其獨特之處,有時其創作者必須為此辯護。也許Python最具爭議的特性是它使用縮排進行語句分組,這直接源自ABC。它是該語言中我最珍視的特性之一。它以兩種方式使Python程式碼更具可讀性。首先,使用縮排減少了視覺混亂,使程式更短,從而減少了理解一個基本程式碼單元所需的注意力範圍。其次,它限制了程式設計師在格式化方面的自由度,從而實現了更統一的風格,這使得閱讀他人的程式碼變得更容易。(例如,比較C語言中大括號放置的三到四種不同約定,每種都有強大的支持者。)

這種對可讀性的強調並非偶然。作為一種面向物件的語言,Python旨在鼓勵建立可重用程式碼。即使我們一直編寫完美的文件,如果程式碼不可讀,也很難被認為是可重用的。除了使用縮排之外,Python的許多特性共同促使Python程式碼具有高度可讀性。這反映了ABC的理念,該理念旨在以最純粹的形式教授程式設計,因此高度重視清晰性。

透過減少不必要的變異性,可讀性通常會得到提升。在可能的情況下,對於特定的構造,只有一種單一、顯而易見的方式來編寫程式碼。這減少了編寫程式碼的程式設計師所面臨的選擇數量,並增加了程式碼對閱讀它的第二個程式設計師來說顯得熟悉的可能性。對Python可讀性的另一個貢獻是選擇以保守、傳統的方式使用標點符號。大多數運算子符號對於任何對高中數學有模糊記憶的人來說都很熟悉,而且不必為像@&$!這樣的漫畫咒罵符號學習新的含義。

我欣然承認Python不是執行速度最快的指令碼語言。不過,它是一個很好的亞軍。隨著硬體速度的不斷提高,程式在其生命週期中的累計執行時間通常與編寫和除錯它所需的程式設計師時間相比可以忽略不計。當然,這才是真正可以節省開支的地方。雖然這很難客觀評估,但大多數嘗試過Python的人都認為它在編碼時間上是贏家。此外,許多人認為使用Python是一種樂趣——難以想象更好的推薦。

我獨自對Python的優點和缺點負責,即使有些程式碼是由其他人編寫的。然而,它的成功是社群的產物,從我首次在網上釋出Python時就採納它的早期使用者開始,他們隨後在自己的環境中傳播了Python。他們透過電子郵件向我傳送了讚揚、批評、功能請求、程式碼貢獻和個人啟示。他們願意在我很快建立的郵件列表中討論Python的各個方面,並在我的最初直覺失靈時教育我或引導我走向正確的方向。貢獻者太多,無法一一感謝。然而,我將破例提及一位:這本書的作者是Python的早期採納者和推廣者之一。隨著這本書的出版,他(和我的!)擁有比標準手冊集更易於理解的Python描述的長期願望,終於實現了。

好了,閒話少說。我強烈推薦這本書給任何有興趣學習Python的人,無論是為了個人提升還是職業發展。來吧,埃裡克,樂隊指揮! (如果你不理解最後這句話,說明你沒看夠Monty Python的重播。)

吉多·範羅蘇姆
弗吉尼亞州雷斯頓,1996年5月