python通過縮進(jìn)來判斷操作是否在分支結(jié)構(gòu)中。 (推薦學(xué)習(xí):Python視頻教程)
Python中的縮進(jìn)(Indentation)決定了代碼的作用域范圍。這一點和傳統(tǒng)的c/c++有很大的不同(傳統(tǒng)的c/c++使用花括號{}符,python使用縮進(jìn)空格)。
每行代碼中開頭的空格數(shù)(whitespace)用于計算該行代碼的縮進(jìn)級別(Indentation level),注意一個Tab等于8個空格(Space),縮進(jìn)級別為0表示無縮進(jìn)空格。
Python中的每一條語句都有一個縮進(jìn)級別,并且縮進(jìn)級別會使用棧的數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲。
在開始讀取文件之前,0(表示縮進(jìn)級別為0,無縮進(jìn))會被首先壓入棧中。然后從文件開頭到末尾,依次讀取每行邏輯代碼,每行邏輯代碼的縮進(jìn)級別都會和棧頂值進(jìn)行比較,如果相等,那么什么都不會發(fā)生;
如果比棧頂值大的話,那么該行邏輯代碼的縮進(jìn)級別就會被壓入棧中,同時會生成一個縮進(jìn)標(biāo)記(INDENT LEVEL);如果比棧頂值小的話,那么棧中所有比該行邏輯代碼縮進(jìn)級別大的值都會從棧中移除,并且還會生成一個擴(kuò)展標(biāo)記(DEDENT LEVEL)。
下面是一個正確的縮進(jìn)案例:
def perm(l):#0 # Compute the list of all permutations of l if len(l) <= 1:# 1 return [l]# 2 r = []# 3 for i in range(len(l)):# 4 s = l[:i] + l[i+1:]# 5 p = perm(s)# 6 for x in p:# 7 r.append(l[i:i+1] + x)# 8 return r# 9