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

《程式設計 Python》第一版序言

《程式設計 Python》第一版序言


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

作為 Python 的創造者,我想談談它的起源,並加入一些個人哲學。

六年多以前,1989 年 12 月,我正在尋找一個“業餘”程式設計專案,可以在聖誕節前後的一週裡讓我忙碌起來。我的辦公室(阿姆斯特丹的一個政府研究實驗室)會關閉,但我有一臺家用電腦,手上也沒有太多其他事情。我決定為我最近一直在思考的新指令碼語言編寫一個直譯器:它是 ABC 的後代,會吸引 Unix/C 駭客。我選擇了 Python 作為該專案的工作名稱,當時心情有點不敬(並且是 Monty Python 飛行馬戲團的忠實粉絲)。

今天,我可以肯定地說,Python 改變了我的生活。我已經搬到了另一個大陸。我把工作日花在用 Python 開發大型系統上,當我沒有在 Python 上進行駭客攻擊或回覆與 Python 相關的電子郵件時。有 Python T 恤、研討會、郵件列表、新聞組,現在還有一本書。坦率地說,我唯一沒有實現的願望是我的照片登上《紐約時報》的頭版。但在我沉迷於白日夢之前,這裡有一些關於 Python 過去的軼事。

這一切都始於 ABC,這是一種我曾在 80 年代初幫助建立的精彩的教學語言。它是一種極其優雅且功能強大的語言,旨在面向非專業程式設計師。儘管它具有所有優雅和強大功能,並且可以免費實現,但 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 的人,無論是為了個人提升還是作為職業發展。請開始吧,埃裡克,樂隊指揮!(如果你不理解最後一句話,說明你沒有看過足夠的 Monty Python 重播。)

Guido van Rossum
弗吉尼亞州雷斯頓,1996 年 5 月