縮排 (indentation) 是 Python 區分程式區塊 (block) 的方式,所謂程式區塊是程式中具有特定功能之處,程式區塊依據條件真或假的結果個別執行。所謂縮排也就是在程式碼開頭的地方多出一些空格數,大多會用 2 到 6 個空格之間,通常縮排的空格數為 4 個。
什麼時候需要縮排呢?在控制結構中的複合陳述就會需要用到縮排,例如利用 if 進行條件 (condition) 判斷
if 3 > 2:
print("3>2")
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:indent01.py
# 功能:示範控制結構中的縮排
# 作者:張凱慶
因為這裡要把條件成立時才會執行的程式碼放在 if 底下縮排的部分,所以條件成立時, if 底下縮排的程式碼 (code) 才會執行,如果條件不成立的話,直譯器就會跳過 if 底下縮排的程式碼,直接去找下面沒有縮排的程式碼繼續執行。
於命令列執行以上程式,結果如下
$ python3 indent01.py |
3>2 |
$ |
另外在函數 (function) 及類別 (class) 定義中也會需要用到縮排,例如這裡定義了 demo() 函數,在關鍵字 def 的下一行縮排,縮排的內容就是函數內容,相對沒有縮排的程式碼就不是函數的定義內容。
def demo():
print("hello")
demo()
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:indent02.py
# 功能:示範函數定義中的縮排
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 indent02.py |
hello |
$ |
Python 程式除了需要區分縮排跟沒有縮排以外,縮排的格數也要一致,不然會發生錯誤的情況。
例如這裡定義的 demo() 函數,底下第一行縮排用了 4 格,第二行卻用了 3 格
def demo():
print(a)
print()
demo()
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:indent03.py
# 功能:示範錯誤的縮排
# 作者:張凱慶
執行時會立即跳出錯誤顯示,告訴我們縮排格數表示不同的層級,每個層級的意義都不同,因此發生錯誤。
於命令列執行以上程式,結果如下
$ python3 indent03.py |
File "indent03.py", line 3 |
print() |
^ |
IndentationError: unindent does not match any outer indentation level |
$ |
最後來討論一下縮排用的空白字元,縮排可以用空白鍵或是 tab 鍵,多數場合 1 個 tab 鍵會表示 4 個空白鍵的效果,也就是 4 個空格,大多數的文字編輯器或整合開發環境也會自動轉換,可是有些文字編輯器或整合開發環境會嚴格區分兩者,導致 tab 鍵仍是 tab 鍵,因此換到不同的開發環境就會發生縮排很長或很短的情況,或是縮排層級異常,所以建議縮排一律使用空白鍵,並且縮排的每個層級都保持一致的空格數。
相關教學影片