Python 入門指南

單元 4 - 變數命名規則與縮排

~~學習進度表~~

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

b
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(變數)

#《程式語言教學誌》的範例程式
# https://kaiching.org/
# 檔名:ch_demo.py
# 功能:示範 Python 中的變數用中文命名
# 作者:張凱慶 */

執行結果如下

$ python ch_demo.py
55
$

雖說中文當變數名稱是可行的,但我們不建議用英文字母、數字與底線以外的字元當變數或識別字 (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) 的方式,例如以下程式

a = 1
print(a)
 a = 3
print(a)
print(a)

#《程式語言教學誌》的範例程式
# https://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 中的底線改成空格,觀察執行結果。

上一頁 單元 3 - 資料型態與變數
回 Python 入門指南首頁
下一頁 單元 5 - 運算式與陳述
回 Python 教材首頁
回程式語言教材首頁