
Python中的每个句子都有一个缩进级,缩进级将使用堆栈的数据结构来存储。在开始阅读文件之前,0(表示缩进级为0,没有
缩进)将首先压入堆栈。然后从文件的开头到结尾依次读取每行逻辑代码。如果相,每行逻辑代码的缩进水平将与堆栈顶值进行比较
等待,那么什么都不会发生;如果比栈顶值大,那么行逻辑代码的缩进级别就会被压入栈中,同时也会产生缩进标记(INDENT
TOKEN);如果比栈顶值小,栈中所有比行逻辑代码缩进级别大的值都会从栈中删除,还会产生扩展标记(DEDENT
TOKEN)。
推荐:Python教程
以下是正确的缩进案例:
defperm(l):#0 #Computethelistofallpermutationsofl iflen(l)<=1:#1 return[l]#2 r=[]#3 foriinrange(len(l)):#4 s=l[:i]+l[i+1:]#5 p=perm(s)#6 forxinp:#7 r.append(l[i:i+1]+x)#8 returnr#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。以下是一个错误的案例
defperm(l):#1error:firstlineindented foriinrange(len(l)):#2error:notindented s=l[:i]+l[i+1:] p=perm(l[:i]+l[i+1:])#3error:unexpectedindent forxinp: r.append(l[i:i+1]+x)#4 returnr#5error:inconsistentdedent
请关注Python视频教程,了解更多Python技术。