Python 解释器在其最简单的级别,以类似的方式操作,即从程序的顶端开始,然后一行一行地顺序执行程序语句。例如,清单 1 展示了几个简单的语句。当把它们键入 Python 解释器中(或者将它们保存在一个文件中,并作为一个 Python 程序来执行)时,读取语句的顺序是从左到右。 当读到一个行结束符(比如换行符)时,Python 解释器就前进到下一行并继续,直到没有了代码行。
清单 1. 一个简单的 Python 程序
>>> i = 1 >>> type(i) >>> l = [0, 1, 2, 3, 4] >>> l * i [0, 1, 2, 3, 4] 在本例中,语句以简单的顺序一个接一个。但是情况并不总是线性的。考虑一个个人的例子。您今天早上醒来,听了交通或天气报告(或者两者都听了)。根据交通报告,您可能选择了一条不同的上班路线;或者类似地,根据天气报告,您为周末计划了不同的活动。您的对策并不简单;根据您所获得的信息,生活的自然顺序迂回而曲折。 Python 像大多数编程语言一样,通过使用流控制语句,也可以以这种方式操作。在 Python 中,有 3 种基本的流控制语句: if 语句,它基于测试表达式的结果执行一个特定的语句块。 while 循环,它当一个测试表达式为 true 时执行一个语句块。 for 循环,它对一个语句块执行一定次数。 这个列表相当简单,并且您可能从其他编程语言认识了这些流控制语句。但是您可能在想,语句块 是什么意思呢。在清单 1 中,您看到了几个简单的语句,包括一个变量初始化、一个方法调用(type 方法)和一个乘法操作。这些语句执行一个简单的操作,因此把它们叫做简单语句。 Python 也具有复合语句,即相关语句形成的语句组,其中包括简单和(可能)附加的复杂语句。例如,根据表达式的值(对个人来说,可能是对“今天的天气晴朗吗”之类问题的答案),一个复合语句可能执行不同的操作或者对一个操作重复多次。这一描述似乎有些类似于前一段的流控制描述。当然应该类似,因为流控制语句就是复合语句。 一个复合语句包括一个流控制指令,后跟一个冒号(:),然后再是一个程序语句块。语句块由一个或多个简单语句和复合语句组成。清单 2 中提供了一个简单的伪代码例子。 清单 2. 一个伪代码例子展示了简单语句和复杂语句 simple statement one compound statement one: simple statement two simple statement three compound statement two: simple statement four simple statement five 该语法看起来既熟悉又陌生,并且两种感觉来自相同的事情:缩进。在列大纲或步骤时,您可能会使用不同级别的缩进来分隔每一项,使得列出来的东西更加清晰可读。Python 遵循这一模型,使用缩进来分隔代码块与程序的其余部分。其他编程语言使用特殊的字符来区分代码块,比如基于 C 的语言中的花括号({ 和 })。这些其他语言也鼓励程序员使用缩进,以改善程序的可读性。 另一方面,Python 需要缩进以指示代码块。如果没有正确地缩进,Python 解释器会抛出异常。可以使用制表符来标记缩进,但是一般推荐使用空格。(为了一致性,我总是使用 4 个空格来缩进代码块。)理由很简单:空格字符只有一种解释方式。另一方面,制表符可以有不同的解释方式,根据所使用的平台或工具,可以解释为 2 个、4 个、6 个甚至 8 个空格。 增强程序可读性 缩进要求可能是 Python 的一个基本指导原则 —— Python 程序应该易于读和理解 —— 的最佳例子。但是这就跟工具一样,顽固分子也可能会编写晦涩的 Python 代码。例如,螺丝起子是用来起螺丝的,但是有时您也可能用来打开油漆盖子。 两个其他特性有助于编写易读的 Python 程序,并且这两者都遵循前面所用的书的比喻。首先,书中的行不会延伸到页面外面,都有固定的长度。其次,书中的行不是以特殊符号(比如分号)结束。这两个特性都贯穿于编写 Python 程序的过程中。 如果某个程序行太长,可以在文中的下一物理行继续这一行。没有硬性规定一个代码行应该多长。但是一般限制为 80 个字符,这容易适合大多数显示器的一个打印页面。有几种方式来扩展超过一行的代码语句: 三引号字符串可以扩展到多个行。 括号中的表达式可以扩展到多个行。 可以使用继续字符(\)来在多行分割语句。 在 Python 中,不需要使用特殊字符(或符号)来指示语句的结束。这与有些语言不同。例如,基于 C 的语言使用分号(;)来指示代码行的结束。然而,有时候需要在一行放多个程序语句,例如初始化变量时。在这样的情况下,可以使用分号来分隔单个语句。