![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=1739552643-vMSV1OHEnX9rZrdGjs1fK5wWzgJFDjlC-0-932d7953b8b9f03013ec63b5bd84f73f)
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=1739552643-Cc2A36YQaxZ51lWwukY2NNIpSXsAWt3c-0-8507bdc8537af78e51a82cf556436dd1)
所有的保留字,如表1-1所示。
表1-1 Python保留字一览表
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_02.jpg?sign=1739552643-3ySg7Xo4IAVfsQJ8VrUQFQANaCxESvuy-0-46b20f9495641a8cc1e7886422e85ded)
由于Python是严格区分大小写的,保留字也不例外。所以,if是保留字,但IF就不是保留字。在实际开发中,如果使用Python中的保留字作为标识符,则解释器会提示“invalid syntax”的错误信息,图1-19所示就是将保留字if当变量而报错。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_03.jpg?sign=1739552643-JcOba7WbmFxub13Eu1FF7Wlpr1UMbFJG-0-c95e975c0254b7d0087de1e55d010ac2)
图1-19 保留字if当作变量
3)标识符中不能包含空格、@、%以及 $ 等特殊字符。
例如,下面所列举的标识符是合法的:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_04.jpg?sign=1739552643-wl1uTP77staBKjqqdccDcxzOmPK36vQU-0-098ca905aba4da33ee91a6e7f8bd5a64)
但以下命名的标识符不合法:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_05.jpg?sign=1739552643-UKJiZPlDAIpjNyvCKiHCdItIU8LboSAf-0-b597879c9af759a81108354eccc7f49b)
4)标识符中的字母是严格区分大小写的,即使两个同样的单词,如果大小写不一样,其代表的意义也是完全不同的。
例如,下面这3个变量就是毫无关系的,它们是相互独立的个体。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/20_01.jpg?sign=1739552643-Hps7WuiY203KJjOS11wfW3LaBqj4a5Iu-0-10c5ccd4c45dc24c238918a26438d15b)
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=1739552643-XM0s1zdMVH9UKG1TfKOiUbgvhidhaQKJ-0-84a78d2abfea557b284a3092e82dc823)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_01.jpg?sign=1739552643-NkOmwpPA9N60KHIPXmTyDQzeBCEfnbRY-0-1bf510429a26bac99a5f245398aaa390)
Python对代码的缩进要求非常严格,同一个级别代码块的缩进量必须一样,否则解释器会报SyntaxError语法错误。
例如,对上面代码做错误改动,如图1-20所示,将位于同一作用域中的两行代码,它们的缩进量分别设置为4个空格和3个空格,可以看到,当手动修改了各自的缩进量后,会导致SyntaxError异常错误。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_02.jpg?sign=1739552643-Yc464sbapDr0UR9ggfmLRegnuRwU8R1Y-0-6eda1d8f77e8239d85d9ef1f55f9b585)
图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=1739552643-Jse08JapU3f5oJoYUC0OVeusmoF8G61p-0-539acd7f5805b64238b091fdd05f7dd4)
图1-21 菜单栏
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_01.jpg?sign=1739552643-EQAaXpMOoJLom4o5Mc7KmPDm7Xf9LSvl-0-f029329edb7e69f2c2b01cd6e7fccc1a)
图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=1739552643-de3b0B0SdYYKdFiMVBMfaJoia5Sg2Bqj-0-40243e98c977dae3e1653612451a87ff)
图1-23 改变默认的代码缩进量
3.Python引号
Python接收单引号(')、双引号(")、三引号(""")来表示字符串,引号的开始与结束必须是相同种类的引号。其中两个三引号之间可以由多行文本组成,是编写多行文本的快捷语法。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_03.jpg?sign=1739552643-Lddmm8FqlMtWCjl8kQhHTy8fo5zfPpwC-0-5867488c71d36d56fb290af601cd65ca)
三引号常用于文档字符串,在文件的特定位置,被当作注释,具体见以下注释。
4.Python注释
注释(Comments)是用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。Python解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。
注释的最大作用是提高程序的可读性,还可以用来临时移除无用的代码。在一般情况下,合理的代码注释应该占源代码的1/3左右。
Python支持两种类型的注释,分别是单行注释和多行注释。
(1)单行注释
Python使用井号(#)作为单行注释的符号,语法格式为:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_01.jpg?sign=1739552643-np5LGPDJKQDP0YAvnFA6e2IGYwtHTmZQ-0-26b2c3aa2386dc412d9d7d65bacf4e6c)
从#标注开始,直到这行结束为止的所有内容都是注释。
【例1-3】 说明多行代码的功能时一般将注释放在代码的上一行。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_02.jpg?sign=1739552643-kCmUAjxmIjLAw8cgIBTlVXSOG09eclHm-0-f10e1765ae41790eb580b95708b93b26)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_03.jpg?sign=1739552643-euwuft2g9JsfOaJUZiBHdxQXRksxKROe-0-0ebb0a1c04ed5f4c634a805df299f433)
【例1-4】 说明单行代码的功能时一般将注释放在代码的右侧。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_04.jpg?sign=1739552643-MbmWXFfcXfsxcAdlzLYvBOKsQkfjZ8Hd-0-2048604be581434fd22448b80df109f4)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_05.jpg?sign=1739552643-lLuneQxJV8ttabXsijXYWHZMYgyqoWDT-0-09205ebafcac39c5c7e3b7e748f69dc4)
(2)多行注释
多行注释指的是一次性注释程序中多行的内容(包含一行)。Python使用3个连续的单引号'''或者三个连续的双引号"""注释多行内容。
无论是多行注释还是单行注释,当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看作正常代码的一部分。
【例1-5】 注释符作为字符串的一部分。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/24_01.jpg?sign=1739552643-TWrwTru2lwfVzGxdv4BLxGY7InFDcScb-0-a165306311600c7d74ee9347be9cd4bc)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/24_02.jpg?sign=1739552643-cHPTgg7ybl32VsR4VMPyDjGck1yyNP7a-0-75d9415f42ec16d118cbd3f9fa788e47)
例中,第1行和第2行代码,Python没有将这里的3个引号看作是多行注释符,而是将它们看作字符串的开始和结束标志;对于第3行代码,Python也没有将#看作单行注释符,而是将它看作字符串的一部分。