# 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)。