Python 入門指南 V2.00 - 單元 4 - 變數命名規則與縮排




依習慣, Python 的變數 (variable) 命名都採有意義的英文單字,形式如下圖



有單一個小寫或大寫英文字母、小寫英文單字及用底線連結的小寫英文單字、大寫英文單字及用底線連結的大寫英文單字、首字母大寫的大寫駝峰型及首字母小寫的小寫駝峰型。


Python 2.x 包含之前的版本只支援 ASCII 編碼,因此只能用英文二十六個字母及底線替變數命名,上述的形式不外變數意思簡單清楚,也是 PEP 8 推薦的形式。


Python 3.x 直接支援 Unicode 編碼,因此除了用為運算子 (operator) 的半形字元或特殊字元外,其他的字元 (character) 都可以拿來當變數名稱,例如


001變數 = 55
002print(變數)
003 
004# 檔名: ch_demo.py 
005# 作者: Kaiching Chang 
006# 時間: July, 2014

執行結果如下



雖說中文當變數名稱是可行的,但我們不建議用英文字母、數字與底線以外的字元當變數或識別字 (identifier) 名稱,原因很簡單,因為 Python 社群發展已久的大量程式庫 (library) 中,無論是標準模組庫 (standard library) 或第三方模組庫 (third-party library) 幾乎都是以英文為變數取名,若是要把自己開發的程式與 Python 社群接軌,仍是依社群的習慣較理想。習慣上命名識別字的字元如下表


_
abcdef
ghijkl
mnopqr
stuvwx
yz
ABCDEF
GHIJKL
MNOPQR
STUVWX
YZ
012345
6789

接下來我們介紹 PEP 8 中推薦的格式,首先有幾個英文字母應該避免使用,這些字母分別是小寫的 l 、大寫的 O 及大寫的 I ,因為在某些字型中 lI 容易跟數字 1 搞混, O 則是容易和數字 0 分不清楚。


注意不能用數字當變數開頭,以下為常見的合法變數名稱


   a
   x
   words
   num

變數為識別字的一種,識別字為程式中需要自行定義的名稱,這些名稱包括函數 (function) 、參數 (parameter) 、類別 (class) 、方法 (method) 、屬性 (attribute) 、模組 (module) 及常數 (constant) 等。以下為常見的合法函數名稱


   fib()
   fib2()
   raw_input()
   split()

以下為常見的合法類別名稱


   MyClass
   Complex
   FirstClass
   FoodExpert

以下為常見的合法常數名稱


   MAX_OVERFLOW
   TOTAL

參數、方法、屬性及模組大體上與變數與函數的命名習慣相同,採取有意義的英文單字或英文單字組合,不過命名習慣可能依開發團隊沒有一致的標準,仍是要以開發團隊為主,這裡是歸納 PEP 8 整理推薦的形式。


另外須留意 Python 程式裡不能隨意縮排 (indentation) ,因為縮排是 Python 劃分程式區塊 (block) 的方式,例如以下程式


001a = 1
002print(a)
003 a = 3
004print(a)
005 
006# 檔名: indent_demo.py 
007# 作者: Kaiching Chang 
008# 時間: July, 2014

執行時會發生錯誤,如下結果



縮排的格數在 PEP 8 建議是 4 格,這方面可自訂,大部分採 2 到 5 格,本書因編輯需求採 3 格。

縮排通常會用在控制結構 (control structure) 或函數、類別的定義裡,這在單元 6 才會開始介紹,接下來我們先來討論運算式 (expression) 與陳述 (statement) 的部份。


中英文術語對照


變數variable
運算子operator
字元character
識別字identifier
程式庫library
標準模組庫standard library
第三方模組庫third-party library
函數function
參數parameter
類別class
方法method
屬性attribute
模組module
常數constant
縮排indentation
區塊block
控制結構control structure
運算式expression
陳述statement

重點整理


  1. 任何 Unicode 字元都可以拿來當 Python 的識別字名稱,習慣上仍是以英文二十六個字母大小寫、數字與底線為主。
  2. 數字不能當變數的起始字元。
  3. 變數及函數名稱通常會用有意義的小寫英文單字,或是多個英文單字的組合。
  4. 類別名稱通常會採大寫駝峰型,方法及屬性則較常採小寫駝峰型,或用底線連接每個單字。
  5. Python 中並不能隨意縮排,縮排表示獨立的區塊,通常用在控制結構或函數、類別的定義裡。


問題與討論


  1. 為什麼數字不能當變數的起始字元?
  2. 為什麼命名變數要用有意義的英文單字?
  3. 大寫駝峰型跟小寫駝峰型的差別在哪裡?為什麼變數、函數、類別、方法、屬性要有不同的命名習慣?
  4. 比較隨意格式的程式語言, Python 強制縮排的格式有什麼優點?

練習


  1. 寫一個程式 exercise0401.py ,用數字當變數的起始字元,例如 2m ,觀察執行結果。
  2. 寫一個程式 exercise0402.py ,設計一個變數 apple_num ,然後把 apple_num 中的底線改成空格,觀察執行結果。

the end

沒有留言: