依習慣, Python 的變數 (variable) 命名都採有意義的英文單字,形式如下
B
lowercase
lower_case_with_underscores
UPPERCASE
UPPER_CASE_WITH_UNDERSCORES
CapitalizedWords
mixedCase
有單一個小寫及大寫英文字母、小寫英文單字及用底線連結的小寫英文單字、大寫英文單字及用底線連結的大寫英文單字、首字母大寫的大寫駝峰型及首字母小寫的小寫駝峰型。
Python 2.x 包含之前的版本只支援 ASCII 編碼,因此只能用英文二十六個字母及底線替變數命名,上述的形式不外變數意思簡單清楚,也是 PEP 8 推薦的形式。
Python 3.x 直接支援 Unicode 編碼,因此除了用為運算子 (operator) 的半形字元或特殊字元外,其他的字元 (character) 都可以拿來當變數名稱,例如
變數 = 55
print(變數)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:ch_demo.py
# 功能:示範 Python 中的變數用中文命名
# 作者:張凱慶 */
執行結果如下
$ python ch_demo.py |
55 |
$ |
雖說中文當變數名稱是可行的,但我們不建議用英文字母、數字與底線以外的字元當變數或識別字 (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) 的方式,例如以下程式
a = 1
print(a)
a = 3
print(a)
print(a)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:indent_demo.py
# 功能:示範 Python 中的縮排錯誤
# 作者:張凱慶 */
執行時會發生錯誤,如下結果
$ python indent_demo.py |
File "indent_demo.py", line 3 |
a = 3 |
^ |
IndentationError: unexpected indent |
$ |
縮排的格數在 PEP 8 建議是 4 格,這方面可自訂,大部分採 2 到 5 格,本書因編輯需求採 2 格。
縮排通常會用在控制結構 (control structure) 或函數、類別的定義裡,這在單元 6 才會開始介紹,接下來我們先來討論運算式 (expression) 與陳述 (statement) 的部份。
中英文術語對照 | |
---|---|
屬性 | attribute |
區塊 | block |
字元 | character |
類別 | class |
常數 | constant |
控制結構 | control structure |
運算式 | expression |
函數 | function |
識別字 | identifier |
縮排 | indentation |
程式庫 | library |
方法 | method |
模組 | module |
運算子 | operator |
參數 | parameter |
標準模組庫 | standard library |
陳述 | statement |
第三方模組庫 | third-party library |
變數 | variable |
重點整理 |
---|
1. 任何 Unicode 字元都可以拿來當 Python 的識別字名稱,習慣上仍是以英文二十六個字母大小寫、數字與底線為主。 |
2. 數字不能當變數的起始字元。 |
3. 變數及函數名稱通常會用有意義的小寫英文單字,或是多個英文單字的組合。 |
4. 類別名稱通常會採大寫駝峰型,方法及屬性則較常採小寫駝峰型,或用底線連接每個單字。 |
5. Python 中並不能隨意縮排,縮排表示獨立的區塊,通常用在控制結構或函數、類別的定義裡。 |
問題與討論 |
---|
1. 為什麼數字不能當變數的起始字元? |
2. 為什麼命名變數要用有意義的英文單字? |
3. 大寫駝峰型跟小寫駝峰型的差別在哪裡?為什麼變數、函數、類別、方法、屬性要有不同的命名習慣? |
4. 比較隨意格式的程式語言, Python 強制縮排的格式有什麼優點? |
練習 |
---|
1. 寫一個程式 exercise0401.py ,用數字當變數的起始字元,例如 2m ,觀察執行結果。 |
2. 寫一個程式 exercise0402.py ,設計一個變數 apple_num ,然後把 apple_num 中的底線改成空格,觀察執行結果。 |
相關教學影片