將 "optparse" 程式碼遷移到 "argparse"
*************************************

"argparse" 模組提供了一些高階功能，這些功能在 "optparse" 模組中並未原
生提供，包括：

* 處理位置引數。

* 支援子命令。

* 允許替代選項前綴，如 "+" 和 "/"。

* 處理零或多個 (zero-or-more) 和一個或多個 (and one-or-more) 樣式的引
  數。

* 產生更多資訊的使用訊息。

* 為自訂 "type" 和 "action" 提供了一個更簡單的介面。

最初 "argparse" 模組試圖保持與 "optparse" 的相容性，但在基礎設計上的存
在差異 -- 支援宣告式 (declarative) 命令列選項處理 (同時將位置引數處理
留給應用程式的程式碼) 和在宣告式介面中支援命名選項 (named options) 和
位置引數 -- 代表 API 隨著時間的推移已經與 "optparse" API 分歧。

如 選擇一個命令列參數剖析函式庫 中所述，目前使用 "optparse" 並對其運作
方式滿意的應用程式可以繼續使用 "optparse"。

在決定是否遷移之前，應用程式開發人員應該先檢閱該段落中描述的內在行為差
異清單，來決定是否值得遷移。

對於選擇從 "optparse" 遷移到 "argparse" 的應用程式，以下建議應會有所幫
助：

* 將所有 "optparse.OptionParser.add_option()" 呼叫替換為
  "ArgumentParser.add_argument()" 呼叫。

* 將 "(options, args) = parser.parse_args()" 替換為 "args =
  parser.parse_args()"，並為位置引數新增額外的
  "ArgumentParser.add_argument()" 呼叫。請記住，以前稱為 "options" 的
  東西，在 "argparse" 情境中現在稱為 "args"。

* 使用 "parse_intermixed_args()" 來替換掉
  "optparse.OptionParser.disable_interspersed_args()"，而不是使用
  "parse_args()"。

* 將回呼動作和 "callback_*" 關鍵字引數替換為 "type" 或 "action" 引數。

* 將 "type" 關鍵字引數的字串名稱替換為相應的類型物件 (例如 int、float
  、complex 等)。

* 將 "optparse.Values" 替換為 "Namespace"，並將 "optparse.OptionError"
  和 "optparse.OptionValueError" 替換為 "ArgumentError"。

* 將隱式引數的字串，如 "%default" 或 "%prog" 替換為使用字典來格式化字
  串的標準 Python 語法，即 "%(default)s" 和 "%(prog)s"。

* 將 OptionParser 建構函式的 "version" 引數替換為呼叫
  "parser.add_argument('--version', action='version', version='<the
  version>')"。
