Python 中的每条语句都有一个缩进级别,缩进级别将使用堆栈数据结构存储。在开始读取文件之前,0(表示缩进级别为0,无
缩进)将首先被压入堆栈。然后从文件头到尾依次读取每一行逻辑代码,并将每一行逻辑代码的缩进级别与栈顶的值进行比较。
等等,那么什么都不会发生;如果大于栈顶的值,则将这行逻辑代码的缩进级数压入栈中,并在其上加一个缩进标记(INDENT
代币);如果小于栈顶的值,则栈中所有大于逻辑代码行缩进级别的值都会被移出栈,并且一个扩展标记(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
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 一个例子来解释如何在 Python 中使用 continue11/29
- ♥ python 3.4是什么时候发布的10/25
- ♥ C语言与Python如何相互调用12/31
- ♥ python和java语法有什么区别11/21
- ♥ 如何使用 Python count() 方法?怎么算?08/28
- ♥ 如何用python3输出打印变量?12/27
内容反馈