![Python应用开发技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/873/47548873/b_47548873.jpg)
1.1.3 Python基础语法
1.1.3.1 Python程序格式
1)Python的标识符
在开发过程中,程序员往往需要在程序中表示一些事物,或者定义一些符号或名称,这些事物的表示、符号以及名称等被称为标识符。在Python语言中,标识符是由字母、数字以及下画线组成的,其命名方式需要遵循下述规则:
(1)标识符由字母、数字以及下画线组成,不能以数字开头。例如,hao123就是一个合法的标识符,而hao-123或者123hao都是不合法的标识符。
(2)标识符对字母的大小写是敏感的。例如,jason和Jason是两个不同的标识符。
(3)标识符不允许与Python语言中的关键字重名。例如,import就不能用于标识符。
此外,如果使用以下画线开头的标识符,则要特别注意该标识符与Python语言中的一些默认接口访问方式的定义是否重名。例如,以单下画线开头的_foo在Python语言中表示不能直接访问的类属性,只有通过类提供的接口才能进行访问,而且不能使用import的方式导入类属性。此外,以双下画线开头的接口(如__foo)和以双下画线开头和结尾的接口(如__foo__)都具有特殊含义,前者代表类的私有成员,后者代表Python语言中函数方法专用的标识,如__init__()代表类的构造函数。
2)行和缩进
Python语言与C、Java等其他语言的最大区别是,Python语言的代码块不使用大括号{}。例如,类、函数以及其他逻辑判断等。Python 最具特色的就是用缩进来写模块。缩进的数量是可变的,所有代码块语句必须包含相同的缩进数量,必须严格遵守。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_27_1.jpg?sign=1738813372-v45WrrHOXDb00QDzxW0SpdsA7jxZGLPB-0-bb2b634b1d1d3699ba84f8d49fb71a4f)
当代码块语句未严格缩进时,在运行前会被检查出错误,如图1.26所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_27_2.jpg?sign=1738813372-7tJAP4UliSwq54ghI9TPBiSyqkMIvHbO-0-b92bd8d4d35c2380d6ab0381ea8fef33)
图1.26 代码块语句为严格缩进
当PyCharm中出现红色波浪线时,表示发生了错误。如果此时将鼠标光标放到红色波浪线上,则会看到PyCharm给出的错误提示,如图1.27所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_28_1.jpg?sign=1738813372-Cm6LPNmjz2hovNbojJJkuORLK99ShKvK-0-f95a31cb5e0b801aa3034c0b104442a2)
图1.27 PyCharm给出的错误提示
图1.27中的错误提示为“Unindent does not match any outer indentation level”,表示图中第9行语句和第11行语句使用的缩进方式不一致(图1.27中,第9行语句使用的是Tab键缩进,第11行语句使用的是空格缩进),将缩进方式改为一致即可。Python语言对缩进格式要求非常严格,因此,在Python程序的代码块中必须使用相同的缩进方式,不建议在编写代码时使用Tab键缩进,也不要混合使用Tab键缩进和空格缩进。
3)语句换行
Python程序的每行语句长度建议不要超过80个字符,对于过长的语句代码可以换行。可以使用多行连接符“\”将一行语句分为多行,例如:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_28_2.jpg?sign=1738813372-wDw7ffHq9XLDRumg6Lwsq3nH9XMeUUhI-0-741dc4b369cccde3a0c302c57cf323ce)
利用Python会对小括号、中括号或大括号中的语句进行隐式连接的特性,开发者无须使用多行连接符“\”就可以实现语句换行,例如:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_28_3.jpg?sign=1738813372-xGOUfdYeyr1mfp8QxeoCTdShWGHmZ0Lw-0-aacdd786068eeec89f267d6e6ec5234b)
4)Python的引号
Python的引号常被用于定义字符串,单引号(')、双引号(")、三引号('''或""")均可用于定义字符串,但必须成对使用引号,即开始的引号与结束的引号必须是相同类型的,要么都是单引号,要么都是双引号或者三引号。三引号还可以定义多行文本,常用于定义文档字符串。如果仅仅使用三引号来定义字符串,而未对定义的字符串进行赋值,则定义的字符串会被当成程序中的注释信息。例如:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_28_4.jpg?sign=1738813372-ZSGhPe8MR8nJQff7s6sP23xHARkboJ2X-0-06dfbcdb65ee2d7945b5115ec4224fef)
5)Python的注释
为了让程序代码易于后续维护或者便于二次开发,程序开发人员通常都会对其中的关键性语句进行功能性的说明。Python语言中的单行注释符是“#”,以“#”为开头的所有后续字符都会被当成程序代码的功能性说明文字,而不是真正要运行的语句。例如,下面代码中的两个注释是不会被Python解释器当成程序语句的。如果使用“#”进行单行注释,建议“#”与其后的说明文字之间留一个空格,“#”和程序语句之间至少要有两个空格。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_29_1.jpg?sign=1738813372-8jtFcg6u9rm4YB9re7RLEt6uhFeoG32V-0-e5d4f73e28e372f951310ea23f56023b)
上述代码在PyCharm中的运行结果如图1.28所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_29_2.jpg?sign=1738813372-adIEH0Wbo2xcELFilDe017n40nHuv9yo-0-494191d606987e54edcbf2f3aacc0e55)
图1.28 Python注释运行结果
注释可以放在语句或表达式的后面,例如
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_29_3.jpg?sign=1738813372-5utm7O0NsIEM6XJody8mrlmwXNpWCOsp-0-3d088932f11a5000d2e615f6e8980bd7)
Python语言中多行注释可使用三引号(3个单引号或3个双引号),例如:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_29_4.jpg?sign=1738813372-2WGUQr8tqjwzCl8iG3DMOa0qjmjwcYnS-0-6eb5c837753b4f8d1052299c55c5c94a)
6)Python的空行
在Python程序中,空行也是属于程序代码的一个组成部分,用来表示一段新代码的开始。例如,在定义函数或类的方法时,可用空行将其与其他代码分开。通常,在函数和类的入口之间也会用一行空行分隔,以突出函数和类入口的开始。这里需要注意的是,空行的使用与代码缩进不同,空行并不是强制性的语法结构,在程序代码中不使用空行也不会出错。使用空行的目的是分隔两段不同功能或含义的代码,便于日后的程序版本迭代、维护及代码重构。
7)Python的输入
Python的输入语句因Python版本的不同有较大的差异。在Python 2.x中,raw_input()函数用来输入内容,如下面的代码所示。在Python 3.x中,不再使用raw_input()函数,取而代之的是input()函数。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_30_1.jpg?sign=1738813372-d0mkuZYwyFNB5N0ljPJexdS1jZ4MXW0M-0-e3763037be9042f3b6840e9bc57f6a28)
在上述的代码中,“\n”是转义字符,用于实现换行,即代码运行后会输出提示信息,即双引号中的字符串内容,输出完毕后换行等待输入内容。若直接按下回车键则完成输入,若按其他键则显示该按键的内容。在Python 3.x的交互工作模式下,在按下回车键完成输入后,Python会把所输入的内容以字符串的格式回显一次,如图1.29所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_30_2.jpg?sign=1738813372-dmVoRqxLthvcGJq1lKVAfooV94sviQa3-0-f5bd1fbcfa3a7f4c495c8cfdd67091b6)
图1.29 在按下回车键后将输入的内容以字符串的格式回显一次
如果在PyCharm中输入内容,则一定要在input()的小括号中设定一个字符串,用于用户输入内容时的提示,因为PyCharm会因为鼠标聚焦而看不到输入光标,如果要显示输入光标,则需要单击一次鼠标。在 PyCharm 输入等待状态时,左下角的“■”(停止)按钮会变为红色,表示程序未结束。如果要强制终止程序,则可按下“■”按钮。此外,PyCharm 与上面的交互工作模式不同,输入内容是不会被回显的。
在PyCharm中,输入内容前的状态如图1.30所示,输入内容后的状态如图1.31所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_30_3.jpg?sign=1738813372-fzxFRCNq5vBIcDZ11iw5iwWhNE8OUkQT-0-e5b26eef2679a03a94b4aac7b36bdcc3)
图1.30 输入内容前的状态
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_31_1.jpg?sign=1738813372-XdtTHzWesmaZeSLJicXqtcq1cJV0Csvg-0-82a5a4d785624149f91ed9f7c024b6bd)
图1.31 输入内容后的状态
8)在同一行中显示多条语句
Python 不但可以逐行解析运行每一条语句,还可以解析运行在同一行中的多条语句。如果要在同一行中解析运行多条语句,则需要使用“;”分开每条语句,例如:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_31_2.jpg?sign=1738813372-YRDTXW8bOzzqMmDswHujDSbCrY8fRyYW-0-8a09b96da96ea8ad3bfe88903a6034cc)
在PyCharm中,在同一行中解析运行多条语句的效果如图1.32所示,图中第1行语句的运行效果与第3、4行语句的运行效果是一样的。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_31_3.jpg?sign=1738813372-PWJ3pyfdPDUsKbO5amPV2dyrdcxjttqT-0-1541f373f375db68d9dbf064a58cea8c)
图1.32 在同一行中解析运行多条语句的结果
9)Python的输出
Python是使用print()函数输出内容的,print()函数会在输出小括号中的内容后自动换行。如果要进行不换行的连续输出,则不同的Python版本有不同的命令格式。在Python 2.x中,需要在输出内容的末尾加上逗号,如希望输出x的值后继续输入y的值,可使用语句print(x,)实现;在Python3.x 中,单纯地在末尾加上逗号是无效的,还需要加上“end=''''”,即 print (x,end=""),表示输出行末尾没有任何特殊符号(换行符)。例如:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_32_1.jpg?sign=1738813372-dfKKMW05YdcfSb0EQbhOXulRDp3dqK0m-0-baa8043c5cef0ddd669c9d6a674d0705)
上述代码在PyCharm中的运行结果如图1.33所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_32_2.jpg?sign=1738813372-1v5bNLAxoizfEFScu4xuRSWMp6ASEzDL-0-bbe71c3d11de75bd3168f5b9778eb6d1)
图1.33 换行输出和不换行输出的运行结果
此外,这里还要注意“print(x,end=);print(y)”的运行结果和“print(x,y)”的运行结果是不同的,后者是通过print()函数实现多个变量输出的,此时print()函数会自动用空格将这些变量间隔开。
1.1.3.2 Python的编程方式
1)交互式编程
交互式编程是在交互工作模式下进行编程的方式,是一种便捷的程序编写方式,它不需要创建脚本文件,通过Python解释器即可解析运行代码。在linux平台中,只需要在命令行工作模式下输入“python”即可进入交互工作模式,提示如下:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_32_3.jpg?sign=1738813372-dMHgGiFLB1QYVYhMSkrb3WFYkoSBVG7a-0-ae226475fc92f42f010d0bc6d56a22bd)
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_33_1.jpg?sign=1738813372-lQxDjp0jSvHsKjd6VQugAdKbJuhnFpC8-0-bfb15a6e0335e99622e73e3c9729da36)
在Window平台中安装Python时,会同时安装交互式编程的启动菜单,本书中的交互式编程的启动菜单是“Python 3.8(64-bit)”,如图1.34所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_33_2.jpg?sign=1738813372-WF5dHLs9N0HB1BPmazdy4YXl40Jk2BwL-0-7ce326274c1c93e69db900441f63a16c)
图1.34 “Python 3.8(64-bit)”
只需单击“Python 3.8(64-bit)”菜单,即可直接进入交互工作模式,并在提示符“>>>”后输入代码:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_33_3.jpg?sign=1738813372-FKOXlIVnh0bwKlvb0QgxtKPGrtMb1nMq-0-a6589dbd45438793b0b1adbc523869e2)
按回车键后即可看到上述代码的运行结果,如图1.35所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_33_4.jpg?sign=1738813372-VGeQJJYiszR9nj7wVLd0STTchoqrBIIH-0-6ad3cabd1ecb5b8206743e4e80dc46c2)
图1.35 代码运行结果
2)脚本式编程
编写Python脚本程序后调用Python解释器编译运行Python脚本,是一种常见的Python程序开发方式。这种方式的优点是编程过程不会受到编译器运行反馈的影响,可以在编写若干条语句、完成一定功能后再统一运行所有的程序。
这里以一个简单的Python脚本程序为例进行说明。首先通过记事本将文本内容保存为以.py为扩展名的文件HelloWorld.py,或者通过记事本新建一个名为HelloWorld.py的文件,然后将以下的代码复制到HelloWorld.py文件中。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_33_5.jpg?sign=1738813372-prutpXUV3b3gurwba4puuC2A8b1Tak2s-0-e0932fce70e20fa119f39002e3396485)
由于在安装Python时已经设置了Python解释器的Path变量,因此可以直接在命令行工作模式下使用以下命令运行程序:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_34_1.jpg?sign=1738813372-CsaRRr12LS7V4c0QH4SgtRy5YIYwlbXW-0-d5f4be034a9c84b814481c3a4e6a7411)
也可以先编写系统可运行的脚本,再调用Python解释器运行Python脚本程序HelloWorld.py。在Windows平台下的系统可运行的脚本autopython.bat如下所示:
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_34_2.jpg?sign=1738813372-gn9tzHmmao3mov0hVx0GsR6YajvWydnM-0-a7767e296ebca301eaa41a5b97ad3cf8)
系统脚本的运行方式如图1.36所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_34_3.jpg?sign=1738813372-dJxFNFsC55lAQfMVbRYUMi52nIBZa2h0-0-3e8f8751b9d4c1a04bcc2d9f7525d4d0)
图1.36 系统脚本的运行方式
脚本运行结果如图1.37所示。
![](https://epubservercos.yuewen.com/414683/26947502002659406/epubprivate/OEBPS/Images/44736_34_4.jpg?sign=1738813372-PGM6aJ0EQpo21dPTJGowSWnBwuLQcAxa-0-243bd3c8b1cf629c548a5202778f4c5b)
图1.37 脚本运行结果