语法和语义,程序格式
本页介绍与 Python 编程有关的几个重要概念和问题。

语法和语义

Python 的程序是具有一定排列形式的一些字符行,但并不是任意一组字符行都是 Python 程序。Python 对其程序和程序的组成部分都有形式上的要求,这种形式要求就是 Python 的语法。就像在自然语言里一样,并不是所有字符序列(例如,中文字的序列)都是相应语言里的合法句子(例如中文句子)。如果一串中文字不符合中文对句子的形式要求,我们可以说“这根本不是中国话”;类似情况下也可以说“这写的根本不是 Python 程序”。

我们在讨论 Python 程序的每一种结构时,都会提到它的形式,也就是说明该种程序结构的语法。例如,二元运算符(例如 +, * 等)的两边都应该是运算对象,连续出现两个二元运算符就不合语法(例如 3 + * 5)。

如果送给 Python 系统的一些字符行不符合 Python 语言的语法要求,那就不是 Python 程序。Python 系统在处理程序输入时可以检查出所有不符合语法的情况,并给出特定形式的语法错误报告(错误信息)。

在用一系列程序元素(数、字符串、运算符、变量等)作为部分构成一种复杂的结构时,Python 语言对其结构不仅有语法要求,对前后出现的元素之间的关系还可能有进一步的要求,这是由程序的上下文形成的关系(上下文导致的约束关系,上下文关系),我们把 Python 语言在这些方面要求称为 Python 程序的静态语义(主要是类型要求)。例如 'abc' * 5 是类型正确的表达式,但 'abc' / 5 和 'abc' + 5 都不是类型正确的表达式。

如果送给 Python 的一段语法上合法的程序违背了 Python 的静态语义要求,Python 系统也会报告错误,例如,输入表达式 'abc' / 5,Python 系统可能给出下面错误信息:

"TypeError: unsupported operand type(s) for /: 'str' and 'int'"
这说明 Python 系统发现了一个类型错误(TypeError)。

满足 Python 的语法和静态语义要求的程序称为结构良好的程序(良结构的程序)。

写出的一段在语法和静态语义上都正确的程序可以被 Python 系统执行,产生相应的效果,这就是该段程序的语义。非“良结构”的代码不能执行,它们没有语义。

我们写程序总是有一定的目的,例如是为了计算出所需的结果,或得到某种执行效果。这实际上是说,为了实现某种预期的作为编程目标的语义。

Python 程序和格式

Python 语言对程序的格式有一套基本的强制性的要求,将其程序的格式也看作是程序语法的一部分,程序的格式会影响到程序的语义。

一个 Python 程序由一些代码行组成,这些代码行的排列方式,主要是它们的退格形式,表达了程序的结构。有关规定主要是为了突出地显示程序的结构:

  1. 从同样的退格位置开始代码行,表示的是位于同一层程序结构的代码。
  2. 如果要描述低一层的结构元素,其所在代码行的开始位置要进一步缩进(退格)。也就是说,进一步退格表示这行(这些行)描述的是更下一个层次的层次代码。也就是说,Python 用形式上的退格方式反映程序的层次性的结构。
  3. 如果程序中的一个部分的描述很长,无法(或不适合)写在一行里,可以在本行最后写一个"续行符号"(反斜线符"\"),这将使 Python 系统把下一行的东西作为本行内容的继续。这样继续可以扩展到任意多行。
为了保证 Python 系统能正确识别程序的结构信息,建议始终用 Python 的 IDLE 环境编程。该环境能正确处理程序的结构和退格问题。使用时要注意:
  1. 接受 IDLE 的退格安排,在进入高低一层时换行,从 IDLE 选定的位置开始输入;
  2. 不要在任何一行的开始自己输入任何空格;
  3. 如果需要退回一层结构,先换到一个新行,然后按退格键。IDLE 能自动处理很多情况。
如果用其他编辑器写 Python 程序,就要特别这一这方面的问题。
本页及相关页面(除另声明者外)由裘宗燕创建维护,可自由用于各种学习活动。其他使用需得到作者许可。