Python開發工具:縮排規則的使用
參考文章來自:https://docs.python.org/2.0/ref/indentation.html 分享一波
前言
Python中的縮排(Indentation)決定了程式碼的作用域範圍。這一點和傳統的c/c++有很大的不同(傳統的c/c++使用花括號{}符,python使用縮排空格)。
每行程式碼中開頭的空格數(whitespace)用於計算該行程式碼的縮排級別(Indentation level),注意一個Tab等於8個空格(Space),縮排級別為0表示無縮排空格。
Python中的每一條語句都有一個縮排級別,並且縮排級別會使用棧的資料結構進行儲存。在開始讀取檔案之前,0(表示縮排級別為0,無縮排)會被首先壓入棧中。然後從檔案開頭到末尾,依次讀取每行邏輯程式碼,每行邏輯程式碼的縮排級別都會和棧頂值進行比較,如果相等,那麼什麼都不會發生;如果比棧頂值大的話,那麼該行邏輯程式碼的縮排級別就會被壓入棧中,同時會生成一個縮排標記(INDENT LEVEL);如果比棧頂值小的話,那麼棧中所有比該行邏輯程式碼縮排級別大的值都會從棧中移除,並且還會生成一個擴充套件標記(DEDENT LEVEL)。
下面是一個正確的縮排案例:
學習從來不是一個人的事情,要有個相互監督的夥伴,工作需要學習python或者有興趣學習python的夥伴可以私信回覆小編“學習” 獲取資料,一起學習
上面的#0行,縮排0個字元,由於檔案讀取之前0已經被壓入棧中了,所以棧中的資料不會發生改變。#1縮排4個字元,4被壓入棧中。#2縮排18個字元,18被壓入棧中。#3縮排4個字元,18被彈出棧,棧頂值又為4了。#4和#3縮排一樣,所以不更新棧資料。#5縮排13個字元,所以13被壓入棧中。#5、#6和#7的縮排一樣,不更新棧資料。#8縮排14個字元,14被壓入棧中。#9的縮排4個字元,所以棧中的13和14都會彈出,棧頂值又恢復為4。
下面是一個錯誤的案例:
#1、#2和#3處的錯誤解釋的很清楚了。#5的縮排級別在棧中找不到所以出錯,#5處的縮排級別是14,比它的上面一行縮排級別18,所以在#5處應該進行出棧處理,但是在棧中找不到14這個級別,所以出錯。
又比如:
最後一行程式碼的縮排級別是1,而且比上一行程式碼的縮排級別小,所以應該出棧處理,但是在出站的時候找不到棧中以前有1的級別,所以報錯。
要修改的話,只需要將最後一行的空