依習慣, Python 的變數 (variable) 命名都採有意義的英文單字,形式如下圖
有單一個小寫或大寫英文字母、小寫英文單字及用底線連結的小寫英文單字、大寫英文單字及用底線連結的大寫英文單字、首字母大寫的大寫駝峰型及首字母小寫的小寫駝峰型。
Python 2.x 包含之前的版本只支援 ASCII 編碼,因此只能用英文二十六個字母及底線替變數命名,上述的形式不外變數意思簡單清楚,也是 PEP 8 推薦的形式。
Python 3.x 直接支援 Unicode 編碼,因此除了用為運算子 (operator) 的半形字元或特殊字元外,其他的字元 (character) 都可以拿來當變數名稱,例如
001 | 變數 = 55 |
002 | print(變數) |
003 | |
004 | # 檔名: ch_demo.py |
005 | # 作者: Kaiching Chang |
006 | # 時間: July, 2014 |
執行結果如下
雖說中文當變數名稱是可行的,但我們不建議用英文字母、數字與底線以外的字元當變數或識別字 (identifier) 名稱,原因很簡單,因為 Python 社群發展已久的大量程式庫 (library) 中,無論是標準模組庫 (standard library) 或第三方模組庫 (third-party library) 幾乎都是以英文為變數取名,若是要把自己開發的程式與 Python 社群接軌,仍是依社群的習慣較理想。習慣上命名識別字的字元如下表
_ | |||||
a | b | c | d | e | f |
g | h | i | j | k | l |
m | n | o | p | q | r |
s | t | u | v | w | x |
y | z | ||||
A | B | C | D | E | F |
G | H | I | J | K | L |
M | N | O | P | Q | R |
S | T | U | V | W | X |
Y | Z | ||||
0 | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 |
接下來我們介紹 PEP 8 中推薦的格式,首先有幾個英文字母應該避免使用,這些字母分別是小寫的 l 、大寫的 O 及大寫的 I ,因為在某些字型中 l 與 I 容易跟數字 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) 的方式,例如以下程式
001 | a = 1 |
002 | print(a) |
003 | a = 3 |
004 | print(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 |
重點整理
- 任何 Unicode 字元都可以拿來當 Python 的識別字名稱,習慣上仍是以英文二十六個字母大小寫、數字與底線為主。
- 數字不能當變數的起始字元。
- 變數及函數名稱通常會用有意義的小寫英文單字,或是多個英文單字的組合。
- 類別名稱通常會採大寫駝峰型,方法及屬性則較常採小寫駝峰型,或用底線連接每個單字。
- Python 中並不能隨意縮排,縮排表示獨立的區塊,通常用在控制結構或函數、類別的定義裡。
問題與討論
- 為什麼數字不能當變數的起始字元?
- 為什麼命名變數要用有意義的英文單字?
- 大寫駝峰型跟小寫駝峰型的差別在哪裡?為什麼變數、函數、類別、方法、屬性要有不同的命名習慣?
- 比較隨意格式的程式語言, Python 強制縮排的格式有什麼優點?
練習
- 寫一個程式 exercise0401.py ,用數字當變數的起始字元,例如 2m ,觀察執行結果。
- 寫一個程式 exercise0402.py ,設計一個變數 apple_num ,然後把 apple_num 中的底線改成空格,觀察執行結果。
the end
沒有留言:
張貼留言