
1.2.3 语法规则

1-4 语法规则
1.Python标识符
在Python语言中,变量名、函数名、对象名等都是通过标识符来命名的。标识符第一个字符必须是英文字母或下画线“_”,标识符的其他部分由字母、数字和下画线组成。Python中的标识符是区分大小写的。在Python 3.x中,非ASCII标识符也是允许的,例如:data_人数=100中的“data_人数”为含汉字的标识符。
标识符的命名规则解释如下。
1)标识符是由字符(A~Z和a~z)、下画线和数字组成的,但第一个字符不能是数字。
2)标识符不能和Python中的保留字相同。
保留字即关键字,保留字不能用作常量或变量,也不能用作任何其他标识符名称。
Python的标准库提供了一个keyword module,可以输出当前版本的所有关键字:

所有的保留字,如表1-1所示。
表1-1 Python保留字一览表

由于Python是严格区分大小写的,保留字也不例外。所以,if是保留字,但IF就不是保留字。在实际开发中,如果使用Python中的保留字作为标识符,则解释器会提示“invalid syntax”的错误信息,图1-19所示就是将保留字if当变量而报错。

图1-19 保留字if当作变量
3)标识符中不能包含空格、@、%以及 $ 等特殊字符。
例如,下面所列举的标识符是合法的:

但以下命名的标识符不合法:

4)标识符中的字母是严格区分大小写的,即使两个同样的单词,如果大小写不一样,其代表的意义也是完全不同的。
例如,下面这3个变量就是毫无关系的,它们是相互独立的个体。

5)以下画线开头的标识符有特殊含义,例如:
以单下画线开头的标识符(如_width),表示不能直接访问的类属性,其无法通过from…import* 的方式导入。
以双下画线开头的标识符(如__add)表示类的私有成员。
以双下画线开头和结尾的标识符(如__init__),是专用标识符。
因此,除非特定场景需要,应避免使用以下画线开头的标识符。
2.缩进和冒号
和许多程序设计语言(如Java、C语言)采用大括号“{}”分隔代码块不同,Python采用代码缩进和冒号(:)来区分代码块之间的层次。对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。
Python中可以使用空格或者Tab键实现代码的缩进。但无论是手动敲空格,还是使用Tab键,通常情况下都是采用4个空格长度作为一个缩进量,因为在默认情况下一个Tab键就表示4个空格。
【例1-2】 体会代码块的缩进规则。

运算结果:

Python对代码的缩进要求非常严格,同一个级别代码块的缩进量必须一样,否则解释器会报SyntaxError语法错误。
例如,对上面代码做错误改动,如图1-20所示,将位于同一作用域中的两行代码,它们的缩进量分别设置为4个空格和3个空格,可以看到,当手动修改了各自的缩进量后,会导致SyntaxError异常错误。

图1-20 缩进规则不符导致的SyntaxError语法错误
在IDLE开发环境中,默认是以4个空格作为代码的基本缩进单位。不过,这个值是可以手动改变的,在图1-21所示的菜单栏中选择“Options → Configure IDLE”命令,会弹出图1-22所示的缩进规则对话框。

图1-21 菜单栏

图1-22 缩进规则对话框
如图1-23所示,通过拖动滑块,即可改变默认的代码缩进量,如拖动至2,则当使用Tab键设置代码缩进量时,会发现按一次Tab键,代码缩进2个空格的长度。不仅如此,在使用IDLE开发环境编写Python代码时,如果想设置多行代码的缩进量,可以使用Ctrl+]和Ctrl+[快捷键,此快捷键可以使所选多行代码快速缩进(或反缩进)。

图1-23 改变默认的代码缩进量
3.Python引号
Python接收单引号(')、双引号(")、三引号(""")来表示字符串,引号的开始与结束必须是相同种类的引号。其中两个三引号之间可以由多行文本组成,是编写多行文本的快捷语法。

三引号常用于文档字符串,在文件的特定位置,被当作注释,具体见以下注释。
4.Python注释
注释(Comments)是用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。Python解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。
注释的最大作用是提高程序的可读性,还可以用来临时移除无用的代码。在一般情况下,合理的代码注释应该占源代码的1/3左右。
Python支持两种类型的注释,分别是单行注释和多行注释。
(1)单行注释
Python使用井号(#)作为单行注释的符号,语法格式为:

从#标注开始,直到这行结束为止的所有内容都是注释。
【例1-3】 说明多行代码的功能时一般将注释放在代码的上一行。

运算结果:

【例1-4】 说明单行代码的功能时一般将注释放在代码的右侧。

运算结果:

(2)多行注释
多行注释指的是一次性注释程序中多行的内容(包含一行)。Python使用3个连续的单引号'''或者三个连续的双引号"""注释多行内容。
无论是多行注释还是单行注释,当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看作正常代码的一部分。
【例1-5】 注释符作为字符串的一部分。

运算结果:

例中,第1行和第2行代码,Python没有将这里的3个引号看作是多行注释符,而是将它们看作字符串的开始和结束标志;对于第3行代码,Python也没有将#看作单行注释符,而是将它看作字符串的一部分。