阻止縮排
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 )