国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

解析Python的縮進規(guī)則的使用

2020-02-16 00:42:03
字體:
供稿:網(wǎng)友

Python中的縮進(Indentation)決定了代碼的作用域范圍。這一點和傳統(tǒng)的c/c++有很大的不同(傳統(tǒng)的c/c++使用花括號{}符,python使用縮進空格)。

每行代碼中開頭的空格數(shù)(whitespace)用于計算該行代碼的縮進級別(Indentation level),注意一個Tab等于8個空格(Space),縮進級別為0表示無縮進空格。

Python中的每一條語句都有一個縮進級別,并且縮進級別會使用棧的數(shù)據(jù)結(jié)構(gòu)進行存儲。在開始讀取文件之前,0(表示縮進級別為0,無縮進)會被首先壓入棧中。然后從文件開頭到末尾,依次讀取每行邏輯代碼,每行邏輯代碼的縮進級別都會和棧頂值進行比較,如果相等,那么什么都不會發(fā)生;如果比棧頂值大的話,那么該行邏輯代碼的縮進級別就會被壓入棧中,同時會生成一個縮進標記(INDENT LEVEL);如果比棧頂值小的話,那么棧中所有比該行邏輯代碼縮進級別大的值都會從棧中移除,并且還會生成一個擴展標記(DEDENT LEVEL)。

下面是一個正確的縮進案例:

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已經(jīng)被壓入棧中了,所以棧中的數(shù)據(jù)不會發(fā)生改變。#1縮進4個字符,4被壓入棧中。#2縮進18個字符,18被壓入棧中。#3縮進4個字符,18被彈出棧,棧頂值又為4了。#4和#3縮進一樣,所以不更新棧數(shù)據(jù)。#5縮進13個字符,所以13被壓入棧中。#5、#6和#7的縮進一樣,不更新棧數(shù)據(jù)。#8縮進14個字符,14被壓入棧中。#9的縮進4個字符,所以棧中的13和14都會彈出,棧頂值又恢復(fù)為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處應(yīng)該進行出棧處理,但是在棧中找不到14這個級別,所以出錯。

又比如:

if True:  print("hello girl")else:  print("hello boy") print("end")

最后一行代碼的縮進級別是1,而且比上一行代碼的縮進級別小,所以應(yīng)該出棧處理,但是在出站的時候找不到棧中以前有1的級別,所以報錯。

要修改的話,只需要將最后一行的空格去掉就可以。

參考文章:https://docs.python.org/2.0/ref/indentation.html

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 北宁市| 温州市| 治县。| 姚安县| 社会| 雷州市| 乌拉特前旗| 志丹县| 宝丰县| 建始县| 平阳县| 郁南县| 隆安县| 安龙县| 外汇| 乐亭县| 井陉县| 太白县| 阳西县| 全椒县| 突泉县| 红河县| 维西| 大庆市| 定安县| 紫阳县| 铁岭县| 嘉善县| 满洲里市| 大埔区| 阿克| 江北区| 苏尼特右旗| 恩施市| 大石桥市| 延长县| 海原县| 武邑县| 公主岭市| 台湾省| 赤水市|