python什麼時候縮排
Python中的縮排(Indentation)決定了程式碼的作用域範圍。這一點和傳統的c/c++有很大的不同(傳統的c/c++使用花括號花括號{}符
決定作用域的範圍;python使用縮排空格來表示作用域的範圍,相同縮排行的程式碼是處於同一範圍)。
每行程式碼中開頭的空格數(whitespace)用於計算該行程式碼的縮排級別(Indentation level),注意一個Tab會被替換為1~8個
Space(具體的空格數量,不同的編譯器有不同的數量),縮排級別為0表示無縮排空格。
在一個原始檔不建議同時使用空格和製表縮排符,當使用別人程式碼的時候幾乎是不可能知道別人使用的是空格還是製表符,這時最好統一
縮排,在IDEL編輯器中可以使用 Edit > Untabify Region 將任何製表符轉化為空格。
Python中的每一條語句都有一個縮排級別,並且縮排級別會使用棧的資料結構進行儲存。在開始讀取檔案之前,0(表示縮排級別為0,無
縮排)會被首先壓入棧中。然後從檔案開頭到末尾,依次讀取每行邏輯程式碼,每行邏輯程式碼的縮排級別都會和棧頂值進行比較,如果相
等,那麼什麼都不會發生;如果比棧頂值大的話,那麼該行邏輯程式碼的縮排級別就會被壓入棧中,同時會生成一個縮排標記(INDENT
TOKEN);如果比棧頂值小的話,那麼棧中所有比該行邏輯程式碼縮排級別大的值都會從棧中移除,並且還會生成一個擴充套件標記(DEDENT
TOKEN)。
下面是一個正確的縮排案例:
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
上面的#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。
下面是一個錯誤的案例
def perm(l): #1 error: first line indented for i in range(len(l)): #2 error: not indented s = l[:i] + l[i+1:] p = perm(l[:i] + l[i+1:]) #3 error: unexpected indent for x in p: r.append(l[i:i+1] + x)#4 return r #5 error: inconsistent dedent
#1、#2和#3處的錯誤解釋的很清楚了。#5的縮排級別在棧中找不到所以出錯,#5處的縮排級別是14,比它的上面一行縮排級別18,所以在
#5處應該進行出棧處理,但是在棧中找不到14這個級別,所以出錯。
又比如:
if True: print("hello girl")else: print("hello boy") print("end")
最後一行程式碼的縮排級別是1,而且比上一行程式碼的縮排級別小,所以應該出棧處理,但是在出站的時候找不到棧中以前有1的級別,所以
報錯。修改這個錯誤,只需要將最後一行的空格去掉就可以。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3244/viewspace-2835498/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python的類什麼時候用Python
- python 中用什麼鍵縮排 —— tab 還是空格?Python
- Python中縮排是什麼?Python特點介紹!Python
- 為什麼程式碼縮排時用 Tab 超級棒?
- C++中什麼時候用move,什麼時候用forward?C++Forward
- python中什麼時候使用自定義類Python
- 什麼時候釋出
- 什麼時候呼叫layoutSubviewsView
- python縮排Python
- 什麼時候採用socket通訊,什麼時候採用http通訊HTTP
- 新版什麼時候釋出?
- 什麼時候該用vuex?Vue
- 到底什麼時候使用mqMQ
- 什麼時候該用MongoDB?MongoDB
- EJB2.0中什麼時候用local interface,什麼時候用remote interface (轉)REM
- Python會在什麼時候被其他語言取代Python
- Haskell程式設計精華:什麼時候該註釋,什麼時候不該註釋Haskell程式設計
- beego 什麼時候支援grpcGoRPC
- session是什麼時候建立的Session
- Mybatis什麼時候需要宣告jdbcType?MyBatisJDBC
- 什麼時候使用z-index?Index
- 什麼時候使用 Lambda 函式?函式
- 什麼時候Linux才能完美?Linux
- 什麼時候Haskell快於CHaskell
- 當我在玩python的時候我玩些什麼Python
- 什麼時候用有狀態session bean,什麼時候用無狀態session bean (轉)SessionBean
- python 縮排問題Python
- win11什麼時候釋出的 win11什麼時候推送詳細介紹
- 舉例說明你什麼時候會用抽象類,什麼時候更願意使用介面?抽象
- request.getParameter("name")什麼時候獲取的引數是null,什麼時候為""空字串Null字串
- 為什麼使用縮排來分組語句?15個為什麼,幫助你更好的理解Python!Python
- 什麼是介面?為什麼使用介面? 什麼時候使用介面?(轉)
- 什麼時候 AngularJS 會超越 jQueryAngularJSjQuery
- 屬性提示什麼時候不出現
- MySQL什麼時候會使用內部臨時表?MySql
- 什麼時候才是微服務拆分的最佳時機?微服務
- 用Python預測你的花唄可以用到什麼時候Python
- 機器什麼時候能夠學習?