![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=1738917836-T2VoMVVC7PpBuBAsbdhXOfgVTCjfLwU5-0-f1f57ff9160f273729290b6874847472)
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=1738917836-tgVI4sj1dFOBClj5x4PBLGlSjdI4jHFt-0-366523451fbfcde58eb3c48465e64752)
所有的保留字,如表1-1所示。
表1-1 Python保留字一览表
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_02.jpg?sign=1738917836-HnYUlkxy0NrL8i1hL3AuprZ1ktLzqjCm-0-f20b9fc685df60f2810b133040e9cb09)
由于Python是严格区分大小写的,保留字也不例外。所以,if是保留字,但IF就不是保留字。在实际开发中,如果使用Python中的保留字作为标识符,则解释器会提示“invalid syntax”的错误信息,图1-19所示就是将保留字if当变量而报错。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_03.jpg?sign=1738917836-2yXSB2tHufVEsaYOyoUVMsAsmIhje7PA-0-00e969e9c2d49fc936da029874cf7334)
图1-19 保留字if当作变量
3)标识符中不能包含空格、@、%以及 $ 等特殊字符。
例如,下面所列举的标识符是合法的:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_04.jpg?sign=1738917836-XF68OoU5tTxRu4aN2i42fYmsKL0H5FXd-0-8689d943232b9f08dd11fdde91eead91)
但以下命名的标识符不合法:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/19_05.jpg?sign=1738917836-nmiXcP4n62T7LysziRgr8ePAUUfvMuUp-0-5e5606257afeaacf0c19cddb28d9a711)
4)标识符中的字母是严格区分大小写的,即使两个同样的单词,如果大小写不一样,其代表的意义也是完全不同的。
例如,下面这3个变量就是毫无关系的,它们是相互独立的个体。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/20_01.jpg?sign=1738917836-wambB8ATaEc1eeeb9Kn2fq0QxzVSmNkm-0-d0f432c82792c0142ee566993103c34f)
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=1738917836-R4fhgmWVwxQszZtoFYdg2Q7HOAytmzZ1-0-ec362373747f7045abe8ef6dedff45fa)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_01.jpg?sign=1738917836-SSJqVTcBGLLKmK0smFCeYnPokYc6mRVb-0-eba0e0aa1bb05d91c995012ed14bd056)
Python对代码的缩进要求非常严格,同一个级别代码块的缩进量必须一样,否则解释器会报SyntaxError语法错误。
例如,对上面代码做错误改动,如图1-20所示,将位于同一作用域中的两行代码,它们的缩进量分别设置为4个空格和3个空格,可以看到,当手动修改了各自的缩进量后,会导致SyntaxError异常错误。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/21_02.jpg?sign=1738917836-b6xuLbv6zXiDG614vfBZ2eGZEOCMx19D-0-777e9225bc8a278d3b74a78612e54287)
图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=1738917836-9pvxWGKrO9pYXSSOrfU31NZnHz4kiU3R-0-a1535758fe176deeeeecaab3ad08726f)
图1-21 菜单栏
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_01.jpg?sign=1738917836-sr2BQyZbn0tY24YCKRDmaLHhUwAfkFFe-0-7a2f1ed40176172e4f0b34fcd254f0c1)
图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=1738917836-1iwkxTvCDxGryBs351rbuJf1o9aKNju2-0-62ae88a57ea0dd6797a8a0f42b1ef004)
图1-23 改变默认的代码缩进量
3.Python引号
Python接收单引号(')、双引号(")、三引号(""")来表示字符串,引号的开始与结束必须是相同种类的引号。其中两个三引号之间可以由多行文本组成,是编写多行文本的快捷语法。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/22_03.jpg?sign=1738917836-0BMGSePuxWhnjqv5XXCdBCX1ic1KvGFX-0-5f06c872a345ae06e926f704cafbff68)
三引号常用于文档字符串,在文件的特定位置,被当作注释,具体见以下注释。
4.Python注释
注释(Comments)是用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。Python解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。
注释的最大作用是提高程序的可读性,还可以用来临时移除无用的代码。在一般情况下,合理的代码注释应该占源代码的1/3左右。
Python支持两种类型的注释,分别是单行注释和多行注释。
(1)单行注释
Python使用井号(#)作为单行注释的符号,语法格式为:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_01.jpg?sign=1738917836-FxKOpDRfeYmVRTxj0436BM0fqXb6P9St-0-15a86c8a530562467dad5e1d77b927b4)
从#标注开始,直到这行结束为止的所有内容都是注释。
【例1-3】 说明多行代码的功能时一般将注释放在代码的上一行。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_02.jpg?sign=1738917836-gOFTQB8wL8glVaTEuPpGo8h5jqwReUNE-0-42a0eb89fa0313d076a8fc3caa5315b2)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_03.jpg?sign=1738917836-E3UXO418I8rYCmDVMUbk3G7o6LERkJIP-0-6c27292c1457fb995ad8f65ec46acee9)
【例1-4】 说明单行代码的功能时一般将注释放在代码的右侧。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_04.jpg?sign=1738917836-V7qEn5lTvf0iCntv45CwXKEA58gclJ8u-0-378ec2817082b98764267935f3ad5ca3)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/23_05.jpg?sign=1738917836-3v3OEp507OstqtL3EUjwB0OrT1SMr1G0-0-73ef0d1bc347dd84a5e0ad0420df7ac3)
(2)多行注释
多行注释指的是一次性注释程序中多行的内容(包含一行)。Python使用3个连续的单引号'''或者三个连续的双引号"""注释多行内容。
无论是多行注释还是单行注释,当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看作正常代码的一部分。
【例1-5】 注释符作为字符串的一部分。
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/24_01.jpg?sign=1738917836-W5MEjzpfEkz00W5Qyn0n3VDgwYHJovSE-0-48836b54d0b98b91673095a012a9bc0b)
运算结果:
![](https://epubservercos.yuewen.com/F38A38/21511156801516706/epubprivate/OEBPS/Images/24_02.jpg?sign=1738917836-tnhW0SMlLyeif3RdgUnO6Twz8W1tacon-0-728b8b0a029ce57ef1dfa1657eebd060)
例中,第1行和第2行代码,Python没有将这里的3个引号看作是多行注释符,而是将它们看作字符串的开始和结束标志;对于第3行代码,Python也没有将#看作单行注释符,而是将它看作字符串的一部分。