1. 淺嘗滋味

如果你經常在電腦上工作,最終總能發現有些工作你會想要自動化。舉例來說,你會想在很多文字檔案裡做相同的搜尋取代,或者是用個複雜的規則重新命名或整理一群照片。也有可能你想寫個自己的小資料庫,一個專門的 GUI 應用程式,或一個小遊戲。

如果你是一個職業軟體開發者,你可能要操作數個 C/C++/Java 程式庫,卻覺得平常寫程式碼、編譯、測試、再編譯的流程太慢;有可能你正為了一個程式庫撰寫一套測試集,但發現寫測試單調乏味;也有可能你正在開發一個能使用某一語言擴充的程式,但並不想要為了這程式特別設計一個全新的擴充語言。

在上述的例子中,Python 正是你合適的語言。

也許你可以為了某些任務而寫個 Unix shell 腳本或者 Windows 批次檔來處理,但 shell 腳本最適合於搬動檔案或更動文字內容,而不適於圖形應用程式或遊戲。你可以為此寫個 C/C++/Java 程式,但僅僅是完成個草稿也需要很長的開發時間。相較而言,Python 更易於使用,並能在 Windows、macOS、Unix 作業系統上執行,且能更快速地幫助你完成工作。

Python 即便易用也是個貨真價實的程式語言。它提供比 shell 腳本、批次檔更多樣的程式架構與更多的支援。另一方面,Python 提供比 C 更豐富的錯語檢查。相較於 C,Python 作為一個「非常高階的程式語言」,它內建了高階的資料型別如彈性的數列與字典。因為這些多用途的資料型別,Python 適用解決比 Awk(甚至是 Perl)能處理的更多問題上。至少在許多事情中,使用 Python 處理起來跟其他語言是同樣容易的。

Python 允許你把程式切割成許多模組 (module) 並將他們重覆運用至其他 Python 程式中。Python 自帶了一個很大集合的標準模組,它們能做為你程式的基礎——或把它們當作一開始學寫 Python 程式的範例。有些模組提供了如檔案 I/O、系統呼叫、socket 的功能,甚至提供了 Tk 等圖形介面工具庫 (GUI toolkit) 的介面。

Python 是個直譯式語言,因為不需要編譯與連結,能為你在開發過程中省下可觀的時間。它的直譯器能互動地使用,因此能很方便地實驗每個語言的功能、寫些用完即丟的程式、幫助測試一些從細部開始開發的函式。它也是個好用的計算機。

Python 讓程式寫得精簡並易讀。用 Python 實作的程式長度往往遠比用 C、C++、Java 實作的短。這有以下幾個原因:

  • Python 高階的資料型別能在一陳述式 (statement) 中表達很複雜的操作;

  • 陳述式的段落以縮排為區隔而非括號;

  • 不需要宣告變數和引數。

Python 是可擴充的:如果你會寫 C 程式,那麼要加個新的內建函式或模組到直譯器中是很容易的。無論是為了用最快速的執行速度完成一些關鍵的操作,或是讓 Python 連結到一些僅以二進位形式 (binary form) 釋出的程式庫(例如特定供應商的繪圖程式庫)。如果你想更多這樣的結合,你其實也可以把 Python 直譯器連結到用 C 寫的應用程式,並在該應用程式中使用 Python 寫擴充或者作為下達指令的語言。

順帶一提,這個語言是以 BBC 的戲劇《Monty Python's Flying Circus》命名,與爬蟲類完全沒有關係。在說明文件中引用他們的喜劇不但沒問題,這甚至是個被鼓勵的行為!

如果你現在已經躍躍欲試,你會想了解 Python 更多細節,而學習語言的最好方式就是直接使用它。接下來這個教學就將帶領你,一邊閱讀,一邊將所學用在 Python 直譯器中玩耍。

在下個章節中,將會解說如何使用該直譯器。這也許只是個普通的資訊,但你必須試著操作接下來呈現的範例。

接下來的教學裡,將會透過許多範例介紹 Python 語言與其系統的諸多特色。一開始是簡單的運算式 (expression)、陳述式 (statement) 和資料型別 (data type);接著是函式 (function) 與模組 (module);最後會接觸一些較進階的主題如例外 (exception) 與使用者自定義類別 (class)。