
7.1 Python程序的基本组成
为了比较完整地展现Python程序的概貌,引入一个温度转换的例子,以此来说明Python程序的基本组成。
7.1.1 一个温度转换的例子
在日常生活中,可能会遇到将摄氏温度转换为华氏温度的情况。这两种温度转换是有规律的,可用如下公式表示:

式中,F代表华氏温度值,C代表摄氏温度值。
为了写出程序,必须进行算法设计,把设计程序的思路厘清楚。
首先,接收一个由键盘输入的摄氏温度值。
其次,利用式(7-1)将刚输入的摄氏温度值转换为华氏温度值。
最后,将转换得到的华氏温度值“报告”出来,即输出。
按照上述思路,写出初步的程序如下:
# TempConvert1.py # 将摄氏温度转换为华氏温度 # 作者:沈红卫 cs=eval(input(’请输入摄氏温度值:')) #等待输入摄氏温度值 fs=9/5*cs+32 #利用公式转换 print(’对应的华氏温度为’, fs, ’度。') #输出转换后的华氏温度
现对上述程序进行分析:整个程序只有6行,其中,前3行以“#”开头,它们是注释行,不算语句;后3行是3条语句,分别用于输入温度、转换温度、输出温度。整个程序是最常见的“输入—处理—输出(简称‘IPO')”的程序形式。
由此可见,Python程序通常由注释、语句、函数、常量、变量等基本部件组成。
1.注释
注释就是对程序或某条语句的解释和说明。
2.语句
语句是程序的最小组成单位,一个程序总是由一条条语句组成的。
3.函数
函数是用于解决或计算某个问题的程序模块(语句块)。
4.常量
常量是不能变化的量。在程序中必定会使用常量。例如,在求圆的面积时,必须使用圆周率3.14,它就是一个典型的常量。
5.变量
变量是可变的量。在程序中必定会使用变量,用于输入、暂存和输出信息。
7.1.2 程序的注释
Python程序的注释有单行注释和多行注释之分。
1.单行注释
Python程序的单行注释是以“#”引导的一段文字,文字内容主要用于描述程序或语句的设计思想、作用或其他需要说明的信息。注释可以单独成行,用于解释说明上面或下面某段程序的作用、算法;也可以跟在某条语句的后面,用于解释、说明该语句的作用、算法。
Python中单行注释的方法是:
#这是Python的注释,它对程序的运行没有任何影响
2.多行注释
多行注释,顾名思义,就是具有多行的注释,它通过使用3对单引号或3对双引号来表示,例如:
"""注释内容 注释内容 注释内容 注释内容"""
或者
''' 注释内容 注释内容 注释内容 注释内容 '''
在上例中,分别使用3对双引号和3对单引号进行注释。
千万不要小看这3对单引号或3对双引号的作用,它们除了用于对程序进行注释(往往用于多行注释),还可以用于打印多行字符串。例如,运行以下代码:
msg = ''' 第1行 第2行 第3行 ''' print (msg)
则在屏幕上输出如下内容:
第1行 第2行 第3行
由此可见引号的神奇之处。
7.1.3 语句
Python程序的语句必须单独成行,它是程序的最小单位。一个程序总是由若干条语句组成的。需要强调的是,Python程序的语句不需要任何结束表示符。
Python程序的语句形式多样,例如,在7.1.1节的例子中,后3行就是3条语句。
· 赋值语句:调用输入函数以获取输入值,然后赋值给变量cs。
· 赋值语句:将表达式的值赋给变量fs。
· 函数调用语句:调用输出函数将结果输出。
Python语句中最常见的是赋值语句,其通常有两种形式。
1.赋值语句的第一种形式
x = 表达式
例如:
x=3
该语句表示将3赋给变量x。
2.赋值语句的第二种形式
x, y =表达式1,表达式2
例如:
x, y=3,4
该语句表示将3赋给变量x,将4赋给变量y。
在一般情况下,一条语句只占用一行,即在Python程序中,一般是一行包含一条语句的所有代码。如果遇到一行无法包含某条语句的全部代码而必须换行的情况,那么该怎么办?
有两种方法解决语句续行的问题。
1.语句续行的第一种方法
在该行代码末尾加上续行符“ \”,即“空格”+“\”。记住,在“ \”前必须有一个空格。
例如:
>>> test = 'item_one' \ 'item_two' \ 'tem_three' >>> test 'item_oneitem_twotem_three' >>>
在上例中,变量test被赋值的语句共占用了3行,赋值号右侧是一个字符串,最终它的输出结果是:'item_oneitem_twotem_three'。
需要提醒的是,虽然赋值号右侧只是一个字符串,但是由于要分行书写,所以,字符串的每一行必须用配对的引号引起来,否则就不符合语法要求,是错误的。
2.语句续行的第二种方法
在需要跨行的语句前后加上括号“()”。如果在语句中使用了{}、[],而其中的内容需要跨行,则可直接跨行,不需要续行符。
例如:
>>> test2 = ('csdn ' 'cssdn') >>> test2 'csdn cssdn' >>>
输出结果为:'csdn cssdn'。由此可见,如果一个字符串需要被跨行表示,那么每行必须使用配对的引号。
7.1.4 常量
常量就是不能变化的量。在程序中一定会使用常量(常值),如7.1.1节例子中的9、5和32都是常量。
Python并没有符号常量,也就是说,不能像C语言那样给常量命名。
在Python中没有专门的规定用于定义常量,通常使用大写标识符表示常量,但不是硬性规定,仅仅是一种区别于变量的提示效果而已。
例如,以下语句定义了一个常量NAME,但它的本质其实是变量。
NAME = 'Python' #本质是变量
Python常量包括数字、字符串、布尔值和空值。
1.数字
数字又被称为数值,通常分为整数、实数和复数3种类型。
1)整数
整数包括正整数、0、负整数,通常使用十进制、十六进制等形式表示。
例如:
>>> x=123 >>> x 123 >>> x=0x7b >>> x 123 >>>
读者对十进制比较熟悉,而对十六进制则比较陌生。当以十六进制表达整数时,必须以0x(0X)作为前导。十六进制的数码为0~9和a~f,其中a~f这6个数码没有大小写之分。此处不讨论各种进制数值之间的转换问题。
2)实数
实数又被称为浮点数,通俗地说,就是带小数点的数。它有一般表示法和指数表示法两种表示形式。
例如,对于浮点数123.78,在Python中可以表示为:
>>> x=123.78 >>> x 123.78 >>> x=1.2378e2 >>> x 123.78 >>>
在上例中,e代表10, e后面的2表示2次方。其中,e也可以大写。例如:
>>> x=1237.8E-1 >>> x 123.78 >>>
3)复数
复数是由一个实部和一个虚部组合而构成的,表示为x + yj。实数部分和虚数部分都是浮点数,虚数部分必须有后缀j或J。
例如:
>>> x=3.1+5.7j >>> x (3.1+5.7j) >>> x=-1.23+6.71J >>> x (-1.23+6.71j) >>>
2.字符串
所谓字符串,就是用配对的双引号或单引号包围起来的一段文字,如"你好"、'hello'。
如果文本本身带有双引号,那么又该如何表示呢?
可用以下方法表示:
'I need "Python"'
上述代码表示的字符串就是:I need "Python"。
3.布尔值
在Python中,可直接用True、False表示布尔值(请注意大小写),前者表示“真”,后者表示“假”。
例如:
>>> x=5 >>> x>6 False >>> x<7 True >>>
4.空值
空值不等于0(≠0),因为0是有含义的,而空值是无任何意义的。在Python中,空值用None表示。千万要记住,空值不等于0,也不等于空格。
7.1.5 变量
变量是内存中命名的存储位置。与常量不同的是,变量的值可以动态变化。
7.1.1节例子中的cs和fs就是典型的变量。
有一点需要加以特别声明,Python中的变量不需要事先定义,可直接使用赋值运算符对其进行赋值操作,根据所赋的值来决定其数据类型。这是与其他大多数计算机语言明显的不同之处。
在Python中,在对变量进行赋值时,使用单引号和双引号的效果是完全一样的。例如:
a = "这是一个变量" b = 2 c = True d = 'hello' #分别定义了4个变量:字符串变量a,数值变量b,布尔值变量c,字符串变量d
每个变量对应相应的内存空间,因此每个变量都有相应的内存地址。变量赋值的本质就是将一个变量的地址复制给另一个变量。这一点也有别于其他计算机语言。
如何获取变量的地址呢?通过内置函数id()即可获取。
例如:
>>> x=5 >>> y=x >>> id(x) 1549102688 >>> id(y) 1549102688 >>>
从上述代码中可以清楚地看出,变量赋值的本质是内存地址复制。换言之,x和y是同一个对象,只不过换了一个名称而已,就像某人的姓名和别名一样。这一点与其他计算机语言真的不一样!
可以使用id()函数输出对象的地址,举例如下:
str1 = "这是一个变量" print("变量str1的值是:"+str1) print("变量str1的地址是:%d" %(id(str1)))
后续有关章节将更为详细地讨论变量问题。
7.1.6 标识符
在Python中,为了使用变量,必须命名变量;为了定义函数,也必须命名函数。凡是类似这样需要命名的对象,统称为Python的“标识符”,它是英文单词“identifier”的中文翻译。
因此,标识符也即变量名、函数名、类名、属性名等。
在Python中,命名标识符必须遵循以下规则:
· 第一个字符必须是字母或下画线(_)。
· 余下的字符可为字母、下画线(_)或数字(0~9)。
· 标识符长度不限。
· 标识符不能与关键字同名。
· 标识符是区分大小写的,也就是说,Score和score是不同的。
按性质分,标识符可分为以下3类。
1.普通类(public)
即正常的函数和变量名,如area、name等,这一类是最常被使用的。
2.特殊类
即类似于__xxx__这样的变量,标识符前后均有两条下画线,它们往往是由Python内部定义的,可被直接引用,但它们是有特殊用途的,如__author__、__name__、__init__,它们是Python内置的变量或属性。
自定义标识符要尽量避免采用类似的形式。
3.私有类(private)
即类似于__xxx这样的函数或变量,标识符前有两条下画线,如__score。它们往往作为私有变量,被用于函数(方法)内或类内。
按照上述规则,Python的所有关键字都不能被用作标识符。Python的关键字共有31个,分别是:
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
7.1.7 函数
为了以模块化思想实现编程,Python程序常使用库函数或自定义函数。函数是程序中不可或缺的重要组成部分。例如,在上述温度转换的程序中,使用input()、print()等内置函数以实现输入和输出。在大多数情况下,程序中还将使用自定义函数。
下面以自定义函数的方式写出温度转换的新程序,如下:
# 将摄氏温度转换为华氏温度 # 作者:沈红卫 def CtoF(): #定义名为CtoF的函数 celsi=eval(input('What is the Celsi temperature? ')) #等待输入摄氏温度值 fahrenheit=9/5*celsi+32 #利用公式转换 print('The temperature is', fahrenheit, 'degrees Fahrenheit.') #输出转换后的华氏温度 #自定义函数结束 #运行该函数 CtoF()
上述程序定义了一个名为CtoF的函数,它的作用就是将摄氏温度转换为华氏温度。函数一旦被定义,即可直接调用,而不需要做任何说明。这一点也非常有别于其他计算机语言。
以上述函数为例,调用的方法如下:
CtoF()
也就是说,Python调用函数的方法是:
函数名(参数)
后续章节将专门讨论函数,此处只是简要介绍而已。