Python 基本語法 – 關鍵字與保留字
簡介
在任何程式語言中,**關鍵字(keyword)與保留字(reserved word)**都是語言的骨幹。它們由直譯器或編譯器保留,不能被當作變數、函式或類別的名稱使用。對於 Python 初學者而言,若不熟悉這些字彙,就很容易碰到 SyntaxError,甚至在程式執行時產生難以偵測的錯誤。
本篇文章將帶你深入了解 Python 的關鍵字與保留字,說明它們的功能、常見使用情境,以及在實務開發中應該注意的陷阱與最佳實踐。透過 實用範例,你將能快速辨識與正確使用這些字彙,寫出更具可讀性與可維護性的程式碼。
核心概念
1. 什麼是關鍵字與保留字
- 關鍵字:Python 語言內建的保留字,具有特殊語法意義,例如
if、for、def等。 - 保留字:在 Python 3.0 之後,關鍵字與保留字已合併成同一個集合,統稱為 keywords。它們全部儲存在
keyword.kwlist中,任何嘗試將它們作為自訂名稱的行為都會導致SyntaxError。
小提醒:即使在未來的 Python 版本加入新關鍵字,舊程式碼仍須保持相容性,避免使用可能成為關鍵字的字串作為名稱。
2. 取得當前 Python 版本的關鍵字列表
import keyword
# 列出所有關鍵字
print(keyword.kwlist)
# 檢查某個字串是否為關鍵字
print(keyword.iskeyword('class')) # True
print(keyword.iskeyword('my_var')) # False
上述程式碼示範如何使用 keyword 模組動態取得關鍵字清單,對於開發工具或程式碼產生器特別有用。
3. 常見關鍵字分類
| 類別 | 關鍵字範例 | 用途說明 |
|---|---|---|
| 流程控制 | if、elif、else、for、while、break、continue、pass |
控制程式執行的走向 |
| 函式與類別 | def、return、lambda、class、yield |
定義函式、回傳值、匿名函式與類別 |
| 例外處理 | try、except、finally、raise、assert |
錯誤捕捉與自訂例外 |
| 資料結構 | in、is、not、and、or |
佈林運算與成員檢查 |
| 其他 | import、from、as、global、nonlocal、del、await、async |
模組管理、作用域控制、協程等 |
4. 程式碼範例
4.1 使用 if、elif、else 判斷
def grade(score):
"""根據分數回傳等第"""
if score >= 90:
return 'A'
elif score >= 80:
return 'B'
elif score >= 70:
return 'C'
else:
return 'F' # 其他分數皆為 F
print(grade(85)) # 輸出: B
if、elif、else 為最常見的流程控制關鍵字,切勿將它們寫成變數名稱。
4.2 for 迴圈與 enumerate
fruits = ['蘋果', '香蕉', '櫻桃']
# 使用 for 直接遍歷
for fruit in fruits:
print(fruit)
# 同時取得索引值
for idx, fruit in enumerate(fruits, start=1):
print(f'{idx}. {fruit}')
for、in 與 enumerate 搭配使用,可讓迴圈更具可讀性。
4.3 def、return、lambda 的比較
# 正規函式
def square(x):
return x * x
# 匿名函式 (lambda)
square_lambda = lambda x: x * x
print(square(5)) # 25
print(square_lambda(5)) # 25
def 用於建立具名函式,lambda 則適合簡短的單行運算。兩者皆不可使用關鍵字作為函式名稱。
4.4 例外處理:try、except、finally
def divide(a, b):
try:
result = a / b
except ZeroDivisionError as e:
print('除以零錯誤:', e)
result = None
finally:
print('運算結束')
return result
print(divide(10, 2)) # 5.0
print(divide(10, 0)) # None 並顯示錯誤訊息
try、except、finally 為處理例外的關鍵字,務必正確縮排以免出現語法錯誤。
4.5 import、as 與模組別名
import math as m # 為模組取別名
print(m.sqrt(16)) # 4.0
from datetime import datetime as dt
print(dt.now())
使用 as 為模組或函式取別名,可提升程式碼可讀性與避免名稱衝突。
常見陷阱與最佳實踐
| 陷阱 | 說明 | 最佳實踐 |
|---|---|---|
| 使用關鍵字當變數名 | list = [1, 2] 會覆寫內建 list 類別,導致後續程式錯誤。 |
永遠避免使用 keyword.kwlist 中的字串作為變數、函式或類別名稱。 |
| 拼寫錯誤 | def fucntion(): 會產生 SyntaxError,因 def 拼錯。 |
使用 IDE 或 Linter(如 flake8、pylint)即時捕捉拼寫問題。 |
| 保留字在未來版本被加入 | async、await 在 Python 3.5 之前不是關鍵字,舊程式碼使用這兩個字作變數會在升級後失效。 |
撰寫程式時,先檢查官方文件的 關鍵字清單,避免使用可能成為關鍵字的字。 |
| 縮排與關鍵字混用 | if、for、while 等必須正確縮排,否則會出現 IndentationError。 |
采用 4 個空格的統一縮排風格,並啟用編輯器的自動縮排功能。 |
global、nonlocal 誤用 |
不當使用會改變變數作用域,導致難以追蹤的 bug。 | 僅在需要跨函式共享變數時才使用,且盡量改用參數傳遞或回傳值。 |
實際應用場景
建立 DSL(Domain Specific Language)
在開發自訂腳本語言或配置檔時,常會檢查使用者輸入是否衝突關鍵字。利用keyword.iskeyword()可快速驗證,避免產生語法錯誤。自動程式碼產生器
例如根據資料庫 schema 產生 ORM 類別,程式必須先過濾掉欄位名稱是關鍵字的情況,並自動加上前綴或後綴(如field_)。靜態分析工具
Linter 會依據關鍵字清單檢查程式碼風格,提醒開發者不要使用保留字作為識別子,或提醒未使用的pass、assert等。教學與測驗平台
在自動評分系統中,會先解析學生提交的程式碼,檢查是否有非法使用關鍵字的情形,提供即時回饋。
總結
- 關鍵字與保留字是 Python 語法的基礎,任何試圖將它們當作自訂名稱的行為都會導致錯誤。
- 透過
keyword模組,我們可以動態取得關鍵字清單,並在開發工具、程式碼產生器或靜態分析中加以利用。 - 正確使用關鍵字(如
if、for、def等)以及避免與之衝突,是寫出乾淨、可維護程式碼的第一步。 - 在實務開發中,常見的陷阱包括拼寫錯誤、縮排問題以及未來版本的關鍵字變化。遵循 最佳實踐(使用 IDE、Linter、統一縮排)能有效降低這些風險。
掌握了關鍵字的概念與使用方式,你就能更自信地撰寫 Python 程式,並在日後的開發工作中避免因語法衝突而產生的各種困擾。祝你寫程式順利,持續精進 Python 技能!