![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=1739300376-kj5AiAO16YnnGFWf1iKl9BymQsEUv6tN-0-c03685cfa48fb64843f313bc4106d0bd)
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=1739300376-W55Qvdt4J5pLpQfH935UbE2DW2e2gCbR-0-92a4583a07b8334da49e803d14bff43a)
所有的保留字,如表1-1所示。
表1-1 Python保留字一览表
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_02.jpg?sign=1739300376-r7uJQ4Xf42SXEBkki4y8cTKi84u7gFim-0-5e53e70b15350ed51c944a67fe89b97a)
由于Python是严格区分大小写的,保留字也不例外。所以,if是保留字,但IF就不是保留字。在实际开发中,如果使用Python中的保留字作为标识符,则解释器会提示“invalid syntax”的错误信息,图1-19所示就是将保留字if当变量而报错。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_03.jpg?sign=1739300376-es3grvcFiS1Dfm7xMqPeao9oGyoZ28zD-0-8365d02d3a58ff77ef623eb6cab7ac19)
图1-19 保留字if当作变量
3)标识符中不能包含空格、@、%以及 $ 等特殊字符。
例如,下面所列举的标识符是合法的:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_04.jpg?sign=1739300376-jOjQX6tORNfuTY37J1kVzmvQlBLgRez4-0-fb70f381090df2f18f66acfc020caa8a)
但以下命名的标识符不合法:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_05.jpg?sign=1739300376-uyUu8jIM2zkgEc3Q1bwxgHk9nyJxkdqf-0-c06b5e3109ac5d46c5a862b7d3596e19)
4)标识符中的字母是严格区分大小写的,即使两个同样的单词,如果大小写不一样,其代表的意义也是完全不同的。
例如,下面这3个变量就是毫无关系的,它们是相互独立的个体。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/20_01.jpg?sign=1739300376-ZwCwjcgbHVbTalMmi4Ssb2py5CqE07P1-0-7ade7832eda43e1ec2f530e72719e04a)
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=1739300376-VMETOBm6XpVq2CkFQhHQPrOUw5N1gO0M-0-a97ab1f2ad4feeb9f6d4ce45e82bf102)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_01.jpg?sign=1739300376-n5waQQmo5Z7eBjXXBZl91BkUxiQLnui9-0-cbfac42ad638b19bde67cf7f8e64bc46)
Python对代码的缩进要求非常严格,同一个级别代码块的缩进量必须一样,否则解释器会报SyntaxError语法错误。
例如,对上面代码做错误改动,如图1-20所示,将位于同一作用域中的两行代码,它们的缩进量分别设置为4个空格和3个空格,可以看到,当手动修改了各自的缩进量后,会导致SyntaxError异常错误。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_02.jpg?sign=1739300376-mD81V1S3MbzJnm0Wrxn2XpQiC4IdJUBr-0-cd69a12361612a6a066ac42b51883d9e)
图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=1739300376-5ppkFvwkEdBWIjhMvXiwOfZ8iuvF85hn-0-031aa52883e985662b7cf886bcd42f82)
图1-21 菜单栏
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_01.jpg?sign=1739300376-AerimV5PavAM3aZhSUehp1Bk4ikIuy26-0-fe3ba2d42e85ec4eb2907ac6e0268c45)
图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=1739300376-mckD3l60n6UryYeADGcd7uLuUFN2dBYk-0-6bc444c59e17274925f247a53817f593)
图1-23 改变默认的代码缩进量
3.Python引号
Python接收单引号(')、双引号(")、三引号(""")来表示字符串,引号的开始与结束必须是相同种类的引号。其中两个三引号之间可以由多行文本组成,是编写多行文本的快捷语法。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_03.jpg?sign=1739300376-YY6aMbeeD0s7DaraNxdFbFh8tC7tiIyG-0-32ac6163c37162bb459f27c2c348ad84)
三引号常用于文档字符串,在文件的特定位置,被当作注释,具体见以下注释。
4.Python注释
注释(Comments)是用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。Python解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。
注释的最大作用是提高程序的可读性,还可以用来临时移除无用的代码。在一般情况下,合理的代码注释应该占源代码的1/3左右。
Python支持两种类型的注释,分别是单行注释和多行注释。
(1)单行注释
Python使用井号(#)作为单行注释的符号,语法格式为:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_01.jpg?sign=1739300376-K3fr92vR0v9uHPEsTQc0QzHuffwgqWto-0-14498bc784037f9b9d9bab31a2515e18)
从#标注开始,直到这行结束为止的所有内容都是注释。
【例1-3】 说明多行代码的功能时一般将注释放在代码的上一行。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_02.jpg?sign=1739300376-bWQAZ9HgabzXktpHbsKhcDGztHdIwBcj-0-b011616a7c01dd22ce54e7a8d162e242)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_03.jpg?sign=1739300376-AVJN0q1MtwB3GrDTDmMGYABCuPkRMJFp-0-01f0f1177c3f9bff9a5dc639f6724fd4)
【例1-4】 说明单行代码的功能时一般将注释放在代码的右侧。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_04.jpg?sign=1739300376-E2z3482MNg8qP9dOki618AFHIviuOLf0-0-60195b1062376e5a5b09a02cca03392c)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_05.jpg?sign=1739300376-xQXx6wsnSIoUeuo2skEJBbYegJj4RuJ5-0-825f40dfaf739da865af5ad9933feea4)
(2)多行注释
多行注释指的是一次性注释程序中多行的内容(包含一行)。Python使用3个连续的单引号'''或者三个连续的双引号"""注释多行内容。
无论是多行注释还是单行注释,当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看作正常代码的一部分。
【例1-5】 注释符作为字符串的一部分。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/24_01.jpg?sign=1739300376-CkB6i15KHt4R3vi1pLm96ZErhLtw4tjG-0-767118a850a1fcd8e708be55a32b0b74)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/24_02.jpg?sign=1739300376-cvVNREzAB8YGlfaB6eCp7cqQOVvrsy1Y-0-67c96f6b31df5a3199f992ff2eb6d2b4)
例中,第1行和第2行代码,Python没有将这里的3个引号看作是多行注释符,而是将它们看作字符串的开始和结束标志;对于第3行代码,Python也没有将#看作单行注释符,而是将它看作字符串的一部分。