阻止縮排

Python 使用縮排來定義控制元件和迴圈結構。這有助於 Python 的可讀性,但是,它需要程式設計師密切關注空白的使用。因此,編輯器錯誤校準可能導致程式碼以意想不到的方式執行。

Python 使用冒號(:)和縮排來顯示程式碼塊的開始和結束位置(如果你來自另一種語言,請不要將其與某種方式與三元運算子相關聯 )。也就是說,Python 中的塊,例如函式,迴圈,if 子句和其他構造,沒有結束識別符號。所有塊都以冒號開頭,然後在其下方包含縮排的行。

例如:

def my_function():    # This is a function definition. Note the colon (:)
    a = 2             # This line belongs to the function because it's indented
    return a          # This line also belongs to the same function
print(my_function())  # This line is OUTSIDE the function block

要麼

if a > b:             # If block starts here
    print(a)          # This is part of the if block
else:                 # else must be at the same level as if
    print(b)          # This line is part of the else block

只包含一個單行語句的塊可以放在同一行,但這種形式通常不被認為是好的樣式:

if a > b: print(a)
else: print(b)  

試圖與多條語句會更多地做到這一點工作:

if x > y: y = x
    print(y) # IndentationError: unexpected indent

if x > y: while y != z: y -= 1  # SyntaxError: invalid syntax

空塊導致 IndentationError。如果你的塊沒有內容,請使用 pass(無效的命令):

def will_be_implemented_later():
    pass

空格與標籤

簡而言之: 始終使用 4 個空格進行縮排。

可以使用製表符,但 PEP 8 (Python 程式碼的樣式指南)宣告空格是首選。

Python 3.x >= 3.0

Python 3 不允許混合使用製表符和空格來縮排。在這種情況下會生成編譯時錯誤:Inconsistent use of tabs and spaces in indentation 並且程式將不會執行。

Python 2.x <= 2.7

Python 2 允許在縮排中混合製表符和空格; 這是非常沮喪的。製表符將前一個縮排完成8 個空格倍數 。由於編輯器通常配置為將選項卡顯示為 4 個空格的多個,因此這可能會導致細微的錯誤。

引用 PEP 8

當使用 -t 選項呼叫 Python 2 命令列直譯器時,它會發出有關非法混合製表符和空格的程式碼的警告。使用 -tt 時,這些警告會出錯。強烈推薦這些選項!

許多編輯器都有標籤到空格配置。在配置編輯器時,應該區分製表 (’\ t’)和 Tab 鍵。

  • 選項卡字元應配置為顯示 8 個空格,以匹配語言語義 - 至少在(偶然)混合縮排可能的情況下。編輯器還可以自動將製表符轉換為空格。
  • 但是,配置編輯器可能會有所幫助,以便 Tab 按鍵將插入 4 個空格,而不是插入製表符。

使用選項卡和空格混合編寫的 Python 原始碼,或者使用非標準數量的縮排空間,可以使用 autopep8 使用 pep8 -conformant。 (大多數 Python 安裝都有一個不太強大的替代方案: reindent.py