Python 教學
***********

小訣竅:

  這份教學是為了那些對 Python 語言有興趣的程式設計師而設計的，**不是**
  對於程式設計*新手*的入門教學。

Python 是一種易學、功能強大的程式語言。它有高效能的高階資料結構，也有
簡單但有效的方法去實現物件導向程式設計。Python 優雅的語法和動態型別，
結合其直譯特性，使它成為眾多領域和大多數平臺上，撰寫腳本和快速開發應用
程式的理想語言。

The Python interpreter and the extensive standard library are freely
available in source or binary form for all major platforms from the
Python website, https://www.python.org/, and may be freely
distributed. The same site also contains distributions of and pointers
to many free third party Python modules, programs and tools, and
additional documentation.

使用 C 或 C++（或其他可被 C 呼叫的程式語言），可以很容易在 Python 直譯
器內新增功能函式及資料型別。同時，對可讓使用者自製功能的應用程式來說，
Python 也適合作為其擴充用介面語言 (extension language)。

這份教學將非常規地介紹 Python 語言與系統的基本概念及功能。請注意，它預
期你對程式設計有基本的了解。實際用 Python 直譯器進行實際操作將有助於學
習，但所有範例都是獨立完整的，所以這份教學也可以離線閱讀。

若想了解 Python 標準物件和模組的描述，請參閱 Python 標準函式庫
(Standard Library)。在 Python 語言參考手冊 中，你可以學到 Python 語言
更正規的定義。想用 C 或 C++ 寫延伸套件 (extensions) 的讀者，請閱讀 擴
充和嵌入 Python 直譯器 和 Python/C API 參考手冊 。此外，市面上也能找到
更深入的 Python 學習書。

這份教學中，我們不會介紹每一個功能，甚至，也不打算介紹完每一個常用功能
。取而代之，我們的重心將放在介紹 Python 中最值得一提的那些功能，幫助你
了解 Python 語言的特色與風格。讀完教學後，你將有能力閱讀和撰寫 Python
模組與程式，也做好進一步學習 Python 標準函式庫 (Standard Library) 中各
類型的 Python 函式庫模組的準備。

術語表 頁面也值得細讀。

* 1. 淺嘗滋味

* 2. 使用 Python 直譯器

  * 2.1. 啟動直譯器

    * 2.1.1. 傳遞引數

    * 2.1.2. 互動模式

  * 2.2. 直譯器與它的環境

    * 2.2.1. 原始碼的字元編碼 (encoding)

* 3. 一個非正式的 Python 簡介

  * 3.1. 把 Python 當作計算機使用

    * 3.1.1. 數字 (Number)

    * 3.1.2. 文字

    * 3.1.3. List（串列）

  * 3.2. 初探程式設計的前幾步

* 4. 深入了解流程控制

  * 4.1. "if" 陳述式

  * 4.2. "for" 陳述式

  * 4.3. "range()" 函式

  * 4.4. "break" 和 "continue" 陳述式

  * 4.5. 迴圈的 "else" 子句

  * 4.6. "pass" 陳述式

  * 4.7. "match" 陳述式

  * 4.8. 定義函式 (function)

  * 4.9. 深入了解函式定義

    * 4.9.1. 預設引數值

    * 4.9.2. 關鍵字引數

    * 4.9.3. 特殊參數

      * 4.9.3.1. 位置或關鍵字引數 (Positional-or-Keyword Arguments)

      * 4.9.3.2. 僅限位置參數 (Positional-Only Parameters)

      * 4.9.3.3. 僅限關鍵字引數 (Keyword-Only Arguments)

      * 4.9.3.4. 函式範例

      * 4.9.3.5. 回顧

    * 4.9.4. 任意引數列表 (Arbitrary Argument Lists)

    * 4.9.5. 拆解引數列表（Unpacking Argument Lists）

    * 4.9.6. Lambda 運算式

    * 4.9.7. 說明文件字串 (Documentation Strings)

    * 4.9.8. 函式註釋 (Function Annotations)

  * 4.10. 間奏曲：程式碼風格 (Coding Style)

* 5. 資料結構

  * 5.1. 進一步了解 List（串列）

    * 5.1.1. 將 List 作為 Stack（堆疊）使用

    * 5.1.2. 將 List 作為 Queue（佇列）使用

    * 5.1.3. List Comprehensions（串列綜合運算）

    * 5.1.4. 巢狀的 List Comprehensions

  * 5.2. "del" 陳述式

  * 5.3. Tuples 和序列 (Sequences)

  * 5.4. 集合 (Sets)

  * 5.5. 字典（Dictionary）

  * 5.6. 迴圈技巧

  * 5.7. 深入了解條件 (Condition)

  * 5.8. 序列和其他資料類型之比較

* 6. 模組 (Module)

  * 6.1. 深入了解模組

    * 6.1.1. 把模組當作腳本執行

    * 6.1.2. 模組的搜尋路徑

    * 6.1.3. 「編譯」Python 檔案

  * 6.2. 標準模組

  * 6.3. "dir()" 函式

  * 6.4. 套件 (Package)

    * 6.4.1. 從套件中 import *

    * 6.4.2. 套件內引用

    * 6.4.3. 多目錄中的套件

* 7. 輸入和輸出

  * 7.1. 更華麗的輸出格式

    * 7.1.1. 格式化的字串文本 (Formatted String Literals)

    * 7.1.2. 字串的 format() method

    * 7.1.3. 手動格式化字串

    * 7.1.4. 格式化字串的舊方法

  * 7.2. 讀寫檔案

    * 7.2.1. 檔案物件的 method

    * 7.2.2. 使用 "json" 儲存結構化資料

* 8. 錯誤和例外

  * 8.1. 語法錯誤 (Syntax Error)

  * 8.2. 例外 (Exception)

  * 8.3. 處理例外

  * 8.4. 引發例外

  * 8.5. 例外鏈接 (Exception Chaining)

  * 8.6. 使用者自定的例外

  * 8.7. 定義清理動作

  * 8.8. 預定義的清理動作

  * 8.9. 引發及處理多個無關的例外

  * 8.10. 用註解使例外更詳細

* 9. Class（類別）

  * 9.1. 關於名稱與物件的一段話

  * 9.2. Python 作用域 (Scope) 及命名空間 (Namespace)

    * 9.2.1. 作用域和命名空間的範例

  * 9.3. 初見 class

    * 9.3.1. Class definition（類別定義）語法

    * 9.3.2. Class 物件

    * 9.3.3. 實例物件

    * 9.3.4. Method 物件

    * 9.3.5. Class 及實例變數

  * 9.4. 隨意的備註

  * 9.5. 繼承 (Inheritance)

    * 9.5.1. 多重繼承

  * 9.6. 私有變數

  * 9.7. 補充說明

  * 9.8. 疊代器 (Iterator)

  * 9.9. 產生器 (Generator)

  * 9.10. 產生器運算式

* 10. Python 標準函式庫概覽

  * 10.1. 作業系統介面

  * 10.2. 檔案之萬用字元 (File Wildcards)

  * 10.3. 命令列引數

  * 10.4. 錯誤輸出重新導向與程式終止

  * 10.5. 字串樣式比對

  * 10.6. 數學相關

  * 10.7. 網路存取

  * 10.8. 日期與時間

  * 10.9. 資料壓縮

  * 10.10. 效能量測

  * 10.11. 品質控管

  * 10.12. 標準模組庫

* 11. Python 標準函式庫概覽——第二部份

  * 11.1. 輸出格式化 (Output Formatting)

  * 11.2. 模板化 (Templating)

  * 11.3. 二進制資料記錄編排 (Binary Data Record Layouts)

  * 11.4. 多執行緒 (Multi-threading)

  * 11.5. 日誌記錄 (Logging)

  * 11.6. 弱引用 (Weak References)

  * 11.7. 使用於 List 的工具

  * 11.8. 十進制浮點數運算 (Decimal Floating-Point Arithmetic)

* 12. 虛擬環境與套件

  * 12.1. 簡介

  * 12.2. 建立虛擬環境

  * 12.3. 用 pip 管理套件

* 13. 現在可以來學習些什麼？

* 14. 互動式輸入編輯和歷史記錄替換

  * 14.1. Tab 鍵自動完成 (Tab Completion) 和歷史記錄編輯 (History
    Editing)

  * 14.2. 互動式直譯器的替代方案

* 15. 浮點數運算：問題與限制

  * 15.1. 表示法誤差 (Representation Error)

* 16. 附錄

  * 16.1. 互動模式

    * 16.1.1. 錯誤處理

    * 16.1.2. 可執行的 Python 腳本

    * 16.1.3. 互動式啟動檔案

    * 16.1.4. 客製化模組
