python缩进规则如何对数据的列进行规则式合并?

和其它程序设计语言(如 Java、C 语言)采用大括号“{}”分隔代码块不同python缩进规则 采用代码缩进和冒号( : )来区分代码块之间的层次。

在 python缩进规则 中对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进表示下一个代码块的开始,而缩进的结束则表示此代码块的结束

注意,python缩进规则 中实现对代码的缩进可以使用空格或者 Tab 键实现。但无论是手动敲空格还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一個缩进量(默认情况下一个 Tab 键就表示 4 个空格)。

例如下面这段 python缩进规则 代码中(涉及到了目前尚未学到的知识,初学者无需理解代码含义只需体会代码块的缩进规则即可):

 #下面 2 行同属于 if 分支语句中包含的代码,因此属于同一作用域
 
python缩进规则 对代码的缩进要求非常严格同一个级别代码块的缩进量必须一样,否则解释器会报 SyntaxError 异常错误例如,对上面代码做错误改动将位于同一作用域中的 2 行代码,它們的缩进量分别设置为 4 个空格和 3 个空格如下所示:
 
可以看到,第二行代码和第三航代码本来属于同一作用域但我们手动修改了各自的縮进量,这会导致 SyntaxError 异常错误如图 1 所示。

图 1 缩进不符合规范导致异常

对于 python缩进规则 缩进规则初学者可以这样理解,python缩进规则 要求属于同┅作用域中的各行代码它们的缩进量必须一致,但具体缩进量为多少并不做硬性规定。

python缩进规则中的缩进(Indentation)决定了代碼的作用域范围这一点和传统的c/c++有很大的不同(传统的c/c++使用花括号{}符,python缩进规则使用缩进空格)

每行代码中开头的空格数(whitespace)用于计算该行代码的缩进级别(Indentation level),注意一个Tab等于8个空格(Space)缩进级别为0表示无缩进空格。

python缩进规则中的每一条语句都有一个缩进级别,并且缩進级别会使用栈的数据结构进行存储在开始读取文件之前,0(表示缩进级别为0无缩进)会被首先压入栈中。然后从文件开头到末尾依次读取每行逻辑代码,每行逻辑代码的缩进级别都会和栈顶值进行比较如果相等,那么什么都不会发生;如果比栈顶值大的话那么該行逻辑代码的缩进级别就会被压入栈中,同时会生成一个缩进标记(INDENT LEVEL);如果比栈顶值小的话那么栈中所有比该行逻辑代码缩进级别大嘚值都会从栈中移除,并且还会生成一个扩展标记(DEDENT LEVEL)

下面是一个正确的缩进案例:

 

上面的#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的级别,所以报错

要修改的话,只需要将最后一行的涳格去掉就可以

以上就是本文的全部内容,希望对大家的学习有所帮助也希望大家多多支持脚本之家。

我要回帖

更多关于 python缩进规则 的文章

 

随机推荐