ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 1.3.4 Python 语言的基本成分 在自然语言中,我们用字词、句子、段落来写文章表达思想。类似地,编程语言也提供 各种语言成分用于构造程序表达计算。例如 HelloWorld 程序中的 print 是 Python 语言中用 于显示输出的一个保留词,而"Hello, World!"则是被显示的数据,这两个成分组合在一 起,就构成了一条完整的语句。本节简单介绍 Python 语言的基本成分,使读者对 Python 编 程有个概括的了解,更多细节将在本书后面的章节中介绍。 数据和表达式 程序是处理数据的,编程语言首先要有表达数据的语言成分,例如"Hello, World!" 就是被处理的数据。数据分为不同的类型,"Hello, World!"是字符串类型的数据。除了 字符串,Python 语言还能表达和处理数值型的数据,例如: ``` >>> print 3.14 3.14 ``` Python 不但能表达"Hello,World!"和 3.14 这样的基本数据,还能表达数据运算。将 运算符施加到数据上所得到的语言构造称为表达式。例如下面的 print 语句显示一个表达 式的计算结果,该表达式中使用了加法(+)和乘法(*)运算符: ``` >>> print 2 + 3 * 4 14 ``` 变量与标识符 像"Hello, World!"和 3.14 这样的数据称为常量,其数据值由字面决定,并且不可 改变。Python 语言中还可以定义变量,用于表示可变的数据。变量具有名字,不同变量是通 过名字相互区分的,因此变量名具有标识作用,故称为标识符①。 Python 语言中,标识符的构成必须符合规则:以字母或下划线开头,后面跟随 0 个或多 个字母、数字、下划线。例如: ``` x xYz x1y2 xy_123 _ (连续两个下划线) _123 ``` 等都是合法的标识符,而 ``` 3q x-123 first name(中间用了空格) ``` 等则是非法的。 > ① Python 程序中还有函数、类、模块等需要命名的构件,这些名字同样都属于标识符。 作为良好的编程风格,标识符的命名是有讲究的。首先,要尽量使用有意义的名字,例 如如果要用一个变量来表示工资,可以命名为 salary、gongzi 之类,而 s 或 gz 就不是好的名字。其次,如果用两个以上单词组成一个名字,最好能让人看出单词之间的分界,具 体做法有后续单词首字母大写①或者用下划线分隔等形式,例如表示出生年份的变量可以命 名为 birthYear 或 birth_year,而 birthyear 就不算是好的风格。第三,每个人应当 前后一致地使用某种命名风格,例如总是用后续单词首字母大写或总是用下划线分隔单词。 本书的示例程序中,一般以小写字母开头的一个或多个英文单词作为变量名,其中后续 单词的首字母都大写,例如 firstName、dateOfBirth。这也是很多人惯用的命名风格。 当然,在很多简单的示例程序中,我们也会使用很多无意义的单字母的变量名,毕竟这些程序不是正式的应用程序。 语句 语句是编程语言提供的基本命令,是程序的基本组成单元和执行单元。Python 语言提供 了多种语句,分别完成不同的功能,例如我们多次见到的 print 语句。每条语句都有规定 的语法形式和精确的语义,本书将采用“模板”的方式来介绍 Python 语句的语法。例如 print 语句的用法“模板”包括: ``` print <表达式> print <表达式 1>, <表达式 2>, ..., <表达式 n> ``` 在语句模板中我们用“&lt;表达式&gt;”之类的符号表示相应位置上所期待的合法语言成分。 第一个模板表示可以在 print 后面出现一个表达式,其含义是计算表达式的值并在屏幕上 显示计算结果。第二个模板表示 print 后面可以出现用逗号分隔的多个表达式,其含义是 计算每个表达式的值,并在屏幕的同一行上显示用空格分隔的各表达式的计算结果。例如: ``` >>> print "2 + 3 =", 2 + 3 2 + 3 = 5 ``` 最常用的一种语句是赋值语句,用于为变量赋值。最简单的赋值语句的形式是: ``` <变量> = <表达式> ``` 其语义是先计算&lt;表达式&gt;的值,再将该值存储到&lt;变量&gt;中。例如: ``` >>> x = 2 + 3 ``` 执行结果是将 5 存储于变量 x 中,此后在表达式中使用 x 就相当于使用 5。例如: ``` >>> print x 5 >>> print x + 1 6 ``` 顾名思义,变量的值随时可以改变,例如下面的赋值语句将 x 的值从 5 改成了"Hello": ``` >>> x = "Hello" >>> print x Hello ``` 用 Python 语言编程时,通常是使每一条语句独占一行,而不将两条以上的语句写在同一 行上。如果一条语句很长,写在一行上读起来不方便,Python 也提供了“续行符”用于换行 继续输入:只要在一行的末尾输入字符“\”再按回车键,就表示本行语句未完,换到下一 行继续。例如: ``` >>> print "This is a very very looooooooooooooooooooooooooong \ sentence." This is a very very looooooooooooooooooooooooooong sentence. ``` ![](img/程序设计思想与方法25151.png)① 顺便提一下,首单词的首字母也大写习惯用于“类名”,而所有字母都大写习惯用于“常量名”。 函数 我们经常将一个语句序列定义成一个“函数”,从而将这个语句序列视为一个整体并命名。 今后在程序的任何地方,只要写下“函数名”,就相当于写下了构成该函数的语句序列,这称 为“调用”该函数。例如,我们将程序 1.2 中的三条语句定义成一个函数: ``` >>> def greet(): print "Hello, Lucy." print "How are you?" print "Goodbye, Lucy." >>> ``` 第一行的 def 告诉 Python 我们要定义一个函数,其后的 greet 是新定义的函数的名字, greet 后面的一对括号用于表示函数的参数。虽然本例中 greet 函数没有参数,但括号仍 然不可缺少。接下来三行是构成函数的语句序列,称为函数体。Python 语言要求:函数体中 的语句与 def 行相比,左边必须留一点空白(称为“缩进”),表示它们是函数的一部分。具 体缩进多少不重要,重要的是函数体的各语句左边要对齐。最后,交互方式下需要用一个空 行(在一行的开始处按回车键)来结束函数定义,使解释器回到提示符状态。 在此我们说明一下 Python 语言的缩进问题。一般来说,Python 程序中所有语句应该左对 齐。但在某些情况下,下一行语句要比上一行语句左边多缩进一些空白,这是为了表达一种 隶属关系:左缩进的语句是上面未缩进语句的下属部分。同层次的语句总是左对齐的,因此 当下属部分结束后,后面的语句又要恢复到未缩进的状态。对于接触过其他编程语言的人来 说,一开始也许会不习惯 Python 的代码缩进,但是以后会发现强制缩进的好处,例如程序在 形式上更整齐、更容易排错等。 上面的函数定义只是告诉 Python 将来看到 greet 时应该做什么,现在并不执行函数体 中的语句序列。将来任何时候如果想执行函数的语句,只需输入函数名来“调用”函数,例 如: ``` >>> greet() Hello, Lucy. How are you? Goodbye, Lucy. ``` 注意函数名 greet 后面的一对括号,这是必须有的,表明这是一个函数调用。 作为惯例,一个 Python 程序中通常会定义一个名叫 main 的函数。对于简单程序,可以 将程序的所有语句放在 main 函数中;对于由很多函数组成的复杂程序,可以让 main 作为程 序的执行入口。拿程序 1.2 来说,更常见的是以如下代码来编写: ``` def main(): print "Hello, Lucy." print "How are you?" print "Goodbye, Lucy." main() ``` 注意最后一行的 main(),它的作用就是调用执行函数 main。没有这一行,该程序仅仅定义了 函数 main,并没有要求执行 main 函数。 虽然像程序 1.2 那样不将所有语句定义放在函数中也是可以的,但习惯上常定义成 main。 这样做至少有一个好处,那就是一旦导入了模块文件,就可以通过键入 main()来多次执行程 序。没有函数的话,就只能通过多次导入模块来执行程序了。 注释 程序中可以使用注释,用于解释变量的含义、函数的功能、模块文件的创建者、程序版 本等等。注释不仅可以帮助他人理解程序,甚至对自己也有帮助理解的作用(试想一下当你 重新拿起几年前写的程序想扩展程序功能时,注释对你的帮助)。 Python 中的注释是以“#”开始的一行,解释器遇见“#”时会自动忽略其后直到行末的 内容。例如我们将上面的 greet()函数存入文件,并加上合适的注释,得到以下程序: 【程序 1.3】eg1_3.py ``` # Author: Lu Chaojun # eg1_3.py (version 1.0) def greet(): print "Hello, Lucy." print "How are you?" print "Goodbye, Lucy." greet() # call the function ```