![Python编程基础与应用](https://wfqqreader-1252317822.image.myqcloud.com/cover/854/41309854/b_41309854.jpg)
1.2.3 语法规则
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/18_01.jpg?sign=1739532268-QPVnZWHjlLYRqrnGWHtjl3JQsMo6jjiv-0-6594708b93a6c82f470f222da7be049e)
1-4 语法规则
1.Python标识符
在Python语言中,变量名、函数名、对象名等都是通过标识符来命名的。标识符第一个字符必须是英文字母或下画线“_”,标识符的其他部分由字母、数字和下画线组成。Python中的标识符是区分大小写的。在Python 3.x中,非ASCII标识符也是允许的,例如:data_人数=100中的“data_人数”为含汉字的标识符。
标识符的命名规则解释如下。
1)标识符是由字符(A~Z和a~z)、下画线和数字组成的,但第一个字符不能是数字。
2)标识符不能和Python中的保留字相同。
保留字即关键字,保留字不能用作常量或变量,也不能用作任何其他标识符名称。
Python的标准库提供了一个keyword module,可以输出当前版本的所有关键字:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_01.jpg?sign=1739532268-JB6FxeZxOmzgLZHWgbKBJi5rXlB4vFZn-0-64ea951333b2681f9252051e9af8b2d1)
所有的保留字,如表1-1所示。
表1-1 Python保留字一览表
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_02.jpg?sign=1739532268-FgZQhdey0D7kzLvvKHrG9bVS4VxuYv4F-0-389a5e6e3aaa2ecb543bac96602a66ef)
由于Python是严格区分大小写的,保留字也不例外。所以,if是保留字,但IF就不是保留字。在实际开发中,如果使用Python中的保留字作为标识符,则解释器会提示“invalid syntax”的错误信息,图1-19所示就是将保留字if当变量而报错。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_03.jpg?sign=1739532268-7U0gC0D5gVN2BZXPwgUd8AFzIj8Hl3r4-0-af2572e3fa0bae3a0c7afb49a45d042f)
图1-19 保留字if当作变量
3)标识符中不能包含空格、@、%以及 $ 等特殊字符。
例如,下面所列举的标识符是合法的:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_04.jpg?sign=1739532268-6CDJWm7ofX6WYPXBft6XQyv3XLjyebcu-0-c197f9f7c6cd00805fd95f74289db946)
但以下命名的标识符不合法:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_05.jpg?sign=1739532268-jbJNVPpz5epAb8jGnrJVWmvPvBLQtNGz-0-b0c9a5be849afbac7ee063f0487046f6)
4)标识符中的字母是严格区分大小写的,即使两个同样的单词,如果大小写不一样,其代表的意义也是完全不同的。
例如,下面这3个变量就是毫无关系的,它们是相互独立的个体。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/20_01.jpg?sign=1739532268-Mzxmso0vBOtSwjsli0SHjuFZEY1sVuca-0-08f8c6173b578b0c1f42fea6283a04d3)
5)以下画线开头的标识符有特殊含义,例如:
以单下画线开头的标识符(如_width),表示不能直接访问的类属性,其无法通过from…import* 的方式导入。
以双下画线开头的标识符(如__add)表示类的私有成员。
以双下画线开头和结尾的标识符(如__init__),是专用标识符。
因此,除非特定场景需要,应避免使用以下画线开头的标识符。
2.缩进和冒号
和许多程序设计语言(如Java、C语言)采用大括号“{}”分隔代码块不同,Python采用代码缩进和冒号(:)来区分代码块之间的层次。对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。
Python中可以使用空格或者Tab键实现代码的缩进。但无论是手动敲空格,还是使用Tab键,通常情况下都是采用4个空格长度作为一个缩进量,因为在默认情况下一个Tab键就表示4个空格。
【例1-2】 体会代码块的缩进规则。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/20_02.jpg?sign=1739532268-QCRHFo6VZ3SokNtBxH0O1tnq7cQVf3u8-0-a1a7b323240c7417ce30805cbe73b25e)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_01.jpg?sign=1739532268-4K6IGEYppTgwLdGW60yYn5qODRGI1rgR-0-29545d5ac466679bb12e4ec5ece7ec22)
Python对代码的缩进要求非常严格,同一个级别代码块的缩进量必须一样,否则解释器会报SyntaxError语法错误。
例如,对上面代码做错误改动,如图1-20所示,将位于同一作用域中的两行代码,它们的缩进量分别设置为4个空格和3个空格,可以看到,当手动修改了各自的缩进量后,会导致SyntaxError异常错误。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_02.jpg?sign=1739532268-nI1l2UPNsgcsJlMoRhIet2f4BkVNoLWC-0-744ac8c06a6490647fe68a76c90cf6c0)
图1-20 缩进规则不符导致的SyntaxError语法错误
在IDLE开发环境中,默认是以4个空格作为代码的基本缩进单位。不过,这个值是可以手动改变的,在图1-21所示的菜单栏中选择“Options → Configure IDLE”命令,会弹出图1-22所示的缩进规则对话框。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_03.jpg?sign=1739532268-6xVU0jUVLi8jtZLYbk6jiZZWgYaIo3Vt-0-6f37b6b4d393387be3b93d17a7402f72)
图1-21 菜单栏
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_01.jpg?sign=1739532268-z1WxPWSqmZaGBBwrdy1uxZ74CDIHrfcY-0-4b4c69133540642fa45f79ec65fc2b6b)
图1-22 缩进规则对话框
如图1-23所示,通过拖动滑块,即可改变默认的代码缩进量,如拖动至2,则当使用Tab键设置代码缩进量时,会发现按一次Tab键,代码缩进2个空格的长度。不仅如此,在使用IDLE开发环境编写Python代码时,如果想设置多行代码的缩进量,可以使用Ctrl+]和Ctrl+[快捷键,此快捷键可以使所选多行代码快速缩进(或反缩进)。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_02.jpg?sign=1739532268-uIkvZikxpkMKeanZE2ecR74as4hKXGkX-0-d1f67006a0f32372c62f1e0b1ab49d93)
图1-23 改变默认的代码缩进量
3.Python引号
Python接收单引号(')、双引号(")、三引号(""")来表示字符串,引号的开始与结束必须是相同种类的引号。其中两个三引号之间可以由多行文本组成,是编写多行文本的快捷语法。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_03.jpg?sign=1739532268-zJS707o5Nz0RIOfdzKTMg9M8qkfvQxnM-0-70ba8253c3fe478ab6d2e23a150c10f7)
三引号常用于文档字符串,在文件的特定位置,被当作注释,具体见以下注释。
4.Python注释
注释(Comments)是用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。Python解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。
注释的最大作用是提高程序的可读性,还可以用来临时移除无用的代码。在一般情况下,合理的代码注释应该占源代码的1/3左右。
Python支持两种类型的注释,分别是单行注释和多行注释。
(1)单行注释
Python使用井号(#)作为单行注释的符号,语法格式为:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_01.jpg?sign=1739532268-5OwRBIMIJYZyAz1NtnDNY7bLCriaUHHm-0-e9f833e97de1551c7020760e166dfc6f)
从#标注开始,直到这行结束为止的所有内容都是注释。
【例1-3】 说明多行代码的功能时一般将注释放在代码的上一行。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_02.jpg?sign=1739532268-lkYSMG66GUf7cyIRBybXmYyklaGvCPpK-0-75b6ca3a6905c96f0208ad2e743d8643)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_03.jpg?sign=1739532268-TbSpfIvMIhIYCQZcQcOh3HqfsevpcT5j-0-9d036e567a7e73a6303383c1addb843f)
【例1-4】 说明单行代码的功能时一般将注释放在代码的右侧。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_04.jpg?sign=1739532268-50FgFUqi0G92YfDj8ha7wXyUShInoXUj-0-a51f740066ea1740691b1531e6e0d0d7)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_05.jpg?sign=1739532268-dFXEtcAPyf1cYReAylR8T9OwbivaPn3l-0-f05cecd0bb3c70716f7e7239f08449b6)
(2)多行注释
多行注释指的是一次性注释程序中多行的内容(包含一行)。Python使用3个连续的单引号'''或者三个连续的双引号"""注释多行内容。
无论是多行注释还是单行注释,当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看作正常代码的一部分。
【例1-5】 注释符作为字符串的一部分。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/24_01.jpg?sign=1739532268-DtQ7QPRDqNJ1js705eM8a1C2c9MQITdu-0-8a9ef43c03ccf21a6f61dc7dbce054d9)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/24_02.jpg?sign=1739532268-7YVg8Yy40UYYvpOQfGSbggncON2AX1D7-0-075f7c7eed88fb119cc16c469012c2c4)
例中,第1行和第2行代码,Python没有将这里的3个引号看作是多行注释符,而是将它们看作字符串的开始和结束标志;对于第3行代码,Python也没有将#看作单行注释符,而是将它看作字符串的一部分。