1.4 代码结构和缩进语法
启动Python 3解释器:
python
在Windows上启动的代码如上,而在Mac或者Linux上,启动的代码如下:
$ python3
Python的控制流结构,如for循环、while循环以及 if 语句,都是由以冒号终止的语句引入的,表示其构造的语句体紧随其后。例如,for循环需要一个循环体,如果你输入:
>>> for i in range(5):
...
Python会显示三点的提示,要求你提供循环体。Python的一个独特的(有时也饱受争议)方面就是前置的空格是有语法意义的。
这意味着Python使用缩进级别,而不像其他语言使用大括号来划分代码块。根据惯例,同级的Python代码都以4个空格缩进。
所以当Python显示三点提示时,我们提供4个空格和一个语句来形成循环体:
... x = i * 10
循环体中还将包含第二条语句,所以在接下来的三点提示中按回车键之后,我们再输入4个空格,然后调用内置的print()
函数:
... print(x)
要终止代码块,那么必须在REPL中输入一个空行:
...
随着我们完成代码块,Python会执行待处理的代码,输出小于50且为10的倍数的数字:
0
10
20
30
40
看一下满屏的Python代码,我们可以看到清晰匹配的缩进——实际上必须匹配——程序的结构如图1.1所示。
图1.1 代码中的空格
即使我们用灰线替换代码,程序的结构也很清楚,如图1.2所示。
图1.2 用灰线替换代码
以冒号结束的每个语句都会开始一个新行,并引入一个额外的缩进级别,直到取消缩进(dedent)将缩进恢复到上一级为止。每个级别的缩进通常是4个空格,稍后会更详细地介绍这些规则。
Python使用的这种缩进语法有3大优点。
(1)它迫使开发人员在代码块中使用单一级别的缩进。在很多语言中,这通常被认为是好的做法,因为它使代码更加易读。
(2)具有缩进语法的代码不会被不必要的花括号混淆,而你永远也不会遇到有关代码标准的争辩——花括号应该在哪里。你可以很容易地识别Python代码中的所有代码块,并且每个人都以相同的方式编写代码。
(3)缩进语法要求作者、Python运行时系统以及需要读取代码的未来维护者必须对代码的结构给出一致的解释。因此,你不会遇到有歧义的代码结构。
Python缩进的规则看起来很复杂,但在实践中却相当简单。
- 你可以使用空格(space)或制表符(tab)作为缩进。普遍的共识是,空格比制表符更好,4个空格已经成为Python社区的标准。
- 一个基本规则就是绝不混用空格和制表符。Python解释器会“抱怨”,你的同事也会对你“穷追猛打”。
- 如果你愿意,你可以在不同的时间使用不同的缩进量。基本规则是相同缩进级别的连续代码行被认为是相同代码块的一部分。
- 这些规则有一些例外,但它们几乎总是与以其他方式提高代码的可读性有关,例如通过将多个语句分解成多行。
严格的代码格式化方法就是像Guido一样进行缩进代码,也许更恰当的说法是像Guido一样缩进它!重视代码质量如可读性已经成为Python文化的核心,接下来我们将探索一下这个问题。