Python 入門指南 5.0

單元 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) 都可以拿來當變數名稱,例如

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 設定中文變數
變數 = 55
# 印出中文變數值
print(變數)

# 檔名: chinese_demo.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月

執行結果如下

$ python chinese_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) 的方式,例如以下程式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 # 註解可以縮排
a = 1
# 印出變數 a
print(a)
# 錯誤縮排
 a = "2"
# 此行不會執行
print(a)

# 檔名: indent_demo.py
# 說明:《Python入門指南》的範例程式
# 網站: http://kaiching.org
# 作者: 張凱慶
# 時間: 2023 年 5 月

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

$ python indent_demo.py
  File "indent_demo.py", line 6
    a = "2"
IndentationError: unexpected indent
$

縮排的格數在 PEP 8 建議是 4 格,這方面可自訂,大部分採 2 到 5 格,本書按慣例採 4 格。

縮排通常會用在控制結構 (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. 內建函數 type() 回傳參數的型態名稱,寫一個程式 exercise0403.py ,利用變數 my_var 分別指派 1False0.01"22" ,然後印出 type() 的回傳結果。 參考程式碼
4. 寫一個程式 exercise0404.py ,利用日文你好 こんにちは 建立變數,其值設定為 "你好" ,然後印出 こんにちは 的值。 參考程式碼
5. 寫一個程式 exercise0405.py ,命名一個用作計數的變數,設定初始值,然後印出這個值。 參考程式碼
6. 寫一個程式 exercise0406.py ,命名一個暫存計算結果的變數,設定初始值,然後印出這個值。 參考程式碼
7. 寫一個程式 exercise0407.py ,命名一個計算匯率的變數,設定初始值,然後印出這個值。 參考程式碼
8. 寫一個程式 exercise0408.py ,命名一個計算匯率的變數,設定初始值,然後印出這個值。 參考程式碼
9. 寫一個程式 exercise0409.py ,自行設計一個縮排有誤的程式,觀察執行後的直譯器訊息。 參考程式碼
10. 承上題,把所有程式碼改成一致的縮排層級,把程式寫在新的 exercise0410.py 中,觀察執行後的直譯器訊息。 參考程式碼

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