深入使用Python的必备基础,教你入门Python的好方法

深入使用Python的必备基础,教你入门Python的好方法第2章 Python基础

Python的功能非常强大,知识点也非常多。针对个人来讲,如果想弄清楚每一个知识点几乎是不可能完成的任务。

欢迎大家来到IT世界,在知识的湖畔探索吧!

深入使用Python的必备基础,教你入门Python的好方法


第2章 Python基础

Python的功能非常强大,知识点也非常多。针对个人来讲,如果想弄清楚每一个知识点几乎是不可能完成的任务。

与其他科目一样,入门Python的好方法是先提纲挈领地把握主要知识点,掌握整体的知识脉络,然后在不断实践中逐渐掌握更多细节,最后针对某个具体领域展开深入具体的研究和应用。

在学习过程中一定要避免只研究局部细节,忽略整体,最终陷入“只见树木,不见森林”的局面。

本章将介绍Python的关键知识点,只要掌握了这些知识点,就可以应对开发过程中的大多数问题,这些知识点也是我们深入使用Python的必备基础。

大家如果有兴趣可以参考《爱上Python——一日精通Python编程》一书,该书只有80页,能够帮助大家快速入门Python。

2.1 如何开始

本书使用的是Python 3。由于Python 2和Python 3有很多相同之处,因此Python 2的读者也可以使用本书,但还是要说明一下,本书直接面向的版本是Python 3。

Python的开发环境有很多种,在实际开发时可以根据需要选择。本书选择使用Anaconda作为开发环境。

Anaconda简单易用,对于初学者非常友好,包括Python和很多常见的软件库,在编程时不需要安装额外配置,安装完成后,可以直接用来完成Python编程。

可以在Anaconda的官网上下载Anaconda。下载页顶部指出了当前的最新版本。

如果想安装其他版本,可以在下载页内根据实际情况选择。具体选择哪种安装包依赖于如下三个因素:

● Python的版本,如Python 2.7或Python 3.8等。需要额外注意,Anaconda不一定支持最新的Python版本,当然,它很快就会支持。

● 操作系统,如Windows、macOS、Linux等。

● 处理器位数,如32位、64位。

根据自己的环境配置,在下载页中下载对应的安装包。

下载完成后,按照提示步骤完成安装即可。通常情况下,只需要依次单击“下一步”按钮即可完成安装。

安装完成后,可以直接打开“Spyder”窗口进行Python编程,如图2-1所示。在图2-1左侧编辑器的第8行输入“print(2+3)”(前7行是程序自带的注释说明与留白),按下“F5”键运行当前程序,图2-1右侧“Python控制台”窗格即可显示计算结果“5”。

深入使用Python的必备基础,教你入门Python的好方法

图2-1 “Spyder”窗口

2.2 基础语法

变量是程序设计基础,本节将分别从变量的概念、定义、运算、输出等角度展开介绍。

2.2.1 变量的概念

可以从如下三个角度来理解变量:

● 容器角度:可以将变量理解为一个盒子,数据存储在变量中。

● 内存角度:变量是内存中的某段空间,是内存中的某个位置。

● 识别角度:变量是“ID”“名字”“标签”等,用于与其他值进行区分。

2.2.2 变量的使用

变量的使用主要涉及:定义(赋值)、运算、输出三方面。

1.定义

一般通过赋值的方式来定义一个变量,其形式为

深入使用Python的必备基础,教你入门Python的好方法

需要注意的是,上述表达式中的“=”含义与数学中的“=”含义是不一样的。这里的“=”表示赋值,它是一个赋值符号,表示将右侧的值赋给左侧的变量。

例如,程序中需要使用一本书的价格,则可以使用如下语句来定义变量price:

深入使用Python的必备基础,教你入门Python的好方法

上述语句定义了一个变量price,并将值365赋给了变量price。

定义变量price后,计算机内存中就会分配出一段空间给price。通过引用名称price,可以访问这个变量,获取该变量的值365;也可以通过访问该变量,修改该变量的值,如:

深入使用Python的必备基础,教你入门Python的好方法

上述语句使price的值变为98。

变量的名称被称为“变量名”,变量名的命名原则是“合法、简单易懂、易于理解”。通常情况下,会根据需要为变量起一个好记、好理解的名字。

● “合法”是指变量的命名必须满足一定条件。

从构成上看,变量名只能由字母、数字、下画线构成,不能包含其他字符。

在使用上,变量名不能使用Python中的关键字。关键字是指已经被使用的一些特殊标记。例如,print表示打印,就不能再定义一个变量名为“print”了。这和中国传统文化中的“避尊者讳,避长者讳,避逝者讳”是一致的。在唐朝,给儿子起名为“李世民”是不可以的;《红楼梦》一书中,林黛玉的母亲叫“贾敏”,林黛玉每次写到“敏”字都要故意少写一笔。

● “简单易懂、易于理解”是指变量名不要有歧义,要直观,一眼能看出来其意义。

例如,给家里的黑猫命名为“小白”没有问题,但是如果这样定义变量名,就容易引起歧义。当变量名由多个单词构成时,可以采用驼峰式命名规则或者使用下画线区分的命名规则。

➢ 驼峰式命名是指将后续出现的单词首字母以大写形式表示,如“liLiZong”。

➢ 下画线区分的命名规则是在不同的单词间使用下画线,如“li_li_zong”。

【注意】在Python中,变量名是大小敏感的。也就是说,“zhangsan”和“zhangSan”是两个不同的变量。

2.运算

Python中支持非常多的运算形式,基本的运算有加法“+”、减法“-”、乘法“*”、除法“/”、整除“//”、取余数“%”、指数“**”等。

表达式:

深入使用Python的必备基础,教你入门Python的好方法

含义为变量b被赋值为变量a的3次方,其值为“125”。

3.输出

在Python中,print()函数用于输出信息。它可以接受0个或多个数据作为参数,参数间用逗号分隔。

【例2.1】变量使用展示。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果为

深入使用Python的必备基础,教你入门Python的好方法

2.3 数据类型

Python提供了多种不同的数据类型来处理数据。之所以提供不同的数据类型,是基于如下两方面的考虑。

1.存储空间的角度

例如,在图2-2中,如果将空间统一划分为如图2-2(a)所示的较小单位,虽然能够存储更多数据,但是较小的空间不能存储较大的数据。如果将所有空间都划分为如图2-2(b)所示的较大单位,虽然能够存储较大的数据,但存储的数据量会变得很少。如果将空间划分为如图2-2(c)所示的大小不一的单位,那么既能够存储大小不等的数据,又有足够多的空间单元来存储数据。

这和我们在生活中使用大小不一的盒子来存储物品的道理是一样的。

深入使用Python的必备基础,教你入门Python的好方法

图2-2 存储空间需求

2.不同运算的需求

在数据处理过程中,针对不同数据类型会有不同的需求。例如,图2-3中的两个数字“5”和“3”:

● 当它们是字符时,我们希望将它们连接起来,得到“53”。

● 当它们是数值时,我们希望计算它们的和,得到“8”。

深入使用Python的必备基础,教你入门Python的好方法

图2-3 运算示例

不同的数据类型,决定了我们想要得到的结果。这和我们在生活中使用不同的厨具来处理不同食材的道理是一样的。

2.3.1 基础类型

本节将介绍整型、浮点型、布尔型、字符串这几种数据类型。

1.整型

整型就是数学中的整数,如9、666、-3等。直接使用:

深入使用Python的必备基础,教你入门Python的好方法

完成定义即可。例如:

深入使用Python的必备基础,教你入门Python的好方法

上述程序定义了一个整型变量price,其值为108。

2.浮点型

浮点型就是小数,即带有小数点的数字,如3.14、2.718281828459、0.618等。例如:

深入使用Python的必备基础,教你入门Python的好方法

上述程序定义了一个浮点数price,其值为99.99。

3.布尔型

由于布尔(George Boole,1815-1864)在逻辑运算领域做出了特殊贡献,因此常将逻辑运算(Logical Operators)称为布尔运算,将其结果称为布尔值。逻辑运算通常用来测试真假值,其结果要么是“真”,要么是“假”。也就是说,布尔型的数据仅包含“True”和“False”两个数据。

例如,逻辑表达式:

深入使用Python的必备基础,教你入门Python的好方法

的结果为“True”。

逻辑表达式:

深入使用Python的必备基础,教你入门Python的好方法

的结果为“False”。

4.字符串

字符串表示一串文本内容,在定义时通常使用“双引号”或“单引号”来完成。例如:

深入使用Python的必备基础,教你入门Python的好方法

上述程序中,分别定义了字符串a和字符串b,字符串c是将字符串a和字符串b连接的结果,得到的是“李立宗Python课程”。最后将c输出,输出的是字符串c的内容。

2.3.2 列表

列表(List)是数据的集合,可以将用到的一组数据集中存储在一个列表中。例如,需要存储100个成绩数据时,不需要单独定义100个整型变量,而是定义一个列表,将所有成绩都存放在这个列表中即可。

1.定义

在定义列表时,使用中括号将所有值括起来,并将不同的值使用逗号分隔开。

【例2.2】列表的定义及输出。

深入使用Python的必备基础,教你入门Python的好方法

本例定义了两个列表,分别是列表a和列表b,并将它们输出。

上述程序输出结果为

深入使用Python的必备基础,教你入门Python的好方法

2.访问

可以使用索引来访问列表内的元素,索引表示的是位置信息。可以使用正索引和负索引两种不同形式来访问列表内的元素。索引信息示意图如图2-4所示。

深入使用Python的必备基础,教你入门Python的好方法

图2-4 索引信息示意图

【例2.3】使用索引访问列表元素。

深入使用Python的必备基础,教你入门Python的好方法

上述程序输出结果为

深入使用Python的必备基础,教你入门Python的好方法

Python提供了使用冒号“:”实现切片功能,其一般语法格式为

深入使用Python的必备基础,教你入门Python的好方法

需要注意的是,上述形式表示的区间是左闭右开的。也就是说,冒号指定的切片区间包含起始索引对应的元素,不包含终止索引对应的元素。例如,有列表“a=[5,8,7,3,9,6,1,0,2]”,则“a[2:6]”表示的是a[2]、a[3]、a[4]、a[5]四个元素,分别是列表a中的7、3、9、6,不包含“a[6]”对应的元素“1”。

在必要时,可以使用“步长”来表示在索引元素时使用的步长,其语法格式为

深入使用Python的必备基础,教你入门Python的好方法

例如,“a[2:9:2]”表示步长为2,表示的值为a[2]、a[4]、a[6]、a[8]四个元素。

除此之外,起始索引、终止索引都可以根据需要省略。

● 如果想从第0个元素开始索引,那么可以将起始索引省略,仅仅用一个终止索引,如“a[:6]”与“a[0:6]”是一致的。此时,相当于省略了开始索引0。

● 如果想索引到最后一个元素,那么可以将终止索引省略,仅仅用一个起始索引,如“a[6:]”表示的是从第7个元素开始索引直到最后一个元素。此时,相当于省略了终止索引位置上的列表长度值(结束位置索引加1的结果)。

【例2.4】使用切片访问列表元素。

深入使用Python的必备基础,教你入门Python的好方法

上述程序输出结果为

深入使用Python的必备基础,教你入门Python的好方法

【注意】在Python中,正索引的起始索引从0开始,负索引的起始索引从-1开始。另外,索引中的“[开始,结束]”是“左闭右开”的形式,终止索引对应的元素并不包含在索引结果中。

3.添加

可以使用函数append向列表的末尾添加元素。例如,使用“a.append(666)”可将数值666添加到列表a的末尾。

【例2.5】使用函数append向列表内添加元素。

深入使用Python的必备基础,教你入门Python的好方法

上述程序输出结果为

深入使用Python的必备基础,教你入门Python的好方法

4.删除

使用del可以删除列表内指定索引对应的元素。例如,使用“del a[2]”会将列表a内索引2对应的元素删除。

【例2.6】使用del删除列表元素。

深入使用Python的必备基础,教你入门Python的好方法

上述程序输出结果为

深入使用Python的必备基础,教你入门Python的好方法

2.3.3 元组

元组(Tuple)在使用上与列表类似,使用圆括号将其中的元素括起来,各元素间使用逗号分隔。需要特别注意的是,元组元素是不能改变的。

【例2.7】使用切片访问元组元素。

深入使用Python的必备基础,教你入门Python的好方法

上述程序中的“#”是注释标记,该标记后面的内容是注释内容,不会被Python执行。如果去掉注释,尝试执行“a[2]=666”,那么程序会报错。上述程输出结果为

深入使用Python的必备基础,教你入门Python的好方法

Python提供了很多处理列表、元组的方法,下面通过【例2.8】来进行简单说明。

【例2.8】数据处理。

深入使用Python的必备基础,教你入门Python的好方法

深入使用Python的必备基础,教你入门Python的好方法

上述程序输出结果为

深入使用Python的必备基础,教你入门Python的好方法

上述程序中,各个语句含义如下。

● c=a+b:表示将元组a和元组b连接到一起,并赋值给c。

● l=len(c):函数len用来计算参数c的长度。

● d=a*3:元组的乘号“*”运算,表示将元组迭代指定的次数,该语句表示将元组a迭代3次。

上述运算,同样适用于列表。

【注意】在Python中:

● 定义列表时使用的是方括号;定义元组时使用的是圆括号。

● 列表的大小是可变的(可以删除、添加元素)、元素值是可修改的;元组的大小、元素值都是固定的,是不能修改的。

2.3.4 字典

列表只能存储单一的信息。例如,在存储一组成绩时,列表只能存储成绩,不能同时存储成绩及对应人名。要想使用列表同时存储人名、成绩,必须构建两个列表,并确定两个列表间的对应关系。很显然这样做的效率不高,而且容易出错。

字典(Dict)是相关数据对的一个集合,这个数据对通常被称为键值对。它和日常生活中使用的字典类似,能够轻松地通过字(键,key),找到对应的解释说明(值,value)。它能够同时存储成绩及对应的人名,并能够通过人名(键)查找到对应的成绩(值)。字典示例如表2-1所示。

表2-1 字典示例

深入使用Python的必备基础,教你入门Python的好方法

1.使用基础

在创建字典时,键和值之间使用冒号分隔,相邻的两个键值对之间使用逗号分隔,所有元素放在“{}”中。例如,“a={“李立宗”:66,”刘能”:88,”赵四”:99}”语句创建了一个字典a。

与列表、元组等不同的是,在引用时字典中的元素时不再使用索引,而是使用键。例如,通过“a[“李立宗”]”可以获取字典a中的键李立宗对应的值66。

【例2.9】字典使用基础。

深入使用Python的必备基础,教你入门Python的好方法

上述程序输出结果为

深入使用Python的必备基础,教你入门Python的好方法

2.改增删

改增删(修改、增加、删除)是在数据处理中最常用的操作,在字典中执行上述操作的方式如下:

● 修改:针对已经存在的键,使用“字典名[键]=新值”的语法形式完成键值对的删除。例如,“a[“李立宗”]=90”语句会将字典中键李立宗对应的值修改为90。

● 增加:使用“字典名[键]=值”的语法形式完成。例如,执行“a[‘小明’]=100”语句可向字典a中新增一个键值对“小明:100”。

● 删除:使用“del字典名[键]”语法形式完成键值对的删除。例如,执行“del a[‘李立宗’]”语句将会删除字典a中键李立宗对应的键值对。

【例2.10】字典的数据处理。

深入使用Python的必备基础,教你入门Python的好方法

上述程序输出结果为

深入使用Python的必备基础,教你入门Python的好方法

深入使用Python的必备基础,教你入门Python的好方法

2.4 选择结构

对症下药,意思是医生针对患者病症用药,指要针对事物存在的问题采取有效的措施。选择结构就是针对不同的条件做出不同的选择,从而执行不同的任务。

某游戏厅有一个投篮游戏,该游戏的成绩显示在一块屏幕上。屏幕显示处理方式如图2-5所示,具体如下:

● 图2-5(a)属于单分支结构。在单分支结构中,当条件成立时,去做某件事情;当条件不成立时,什么都不做。对于本例为,若投篮成绩大于90分,则在屏幕上显示“A级”;否则,什么都不显示。

● 图2-5(b)属于双分支结构。在双分支中结构,当条件成立时,去做某件事情;当条件不成立时,去做另外一件事情。对于本例为,若投篮成绩大于90分,则在屏幕上显示“A级”;否则,在屏幕上显示“加油”。

● 图2-5(c)属于多分支结构。在多分支结构中,逐个判断是否满足某个条件,并根据判断结果执行对应的语句。对于本例为

➢ 先判断投篮成绩是否大于90分,若大于90分,则在屏幕上显示“A级”;否则,继续后续判断。

➢ 然后判断投篮成绩是否大于80分,若大于80分,则在屏幕上显示“B级”;否则,继续后续判断。

➢ 然后判断投篮成绩是否大于70分,若大于70分,则在屏幕上显示“C级”;否则,继续后续判断。

➢ 然后判断投篮成绩是否大于60分,若大于60分,则在屏幕上显示“D级”;否则,在屏幕上显示“加油”。

在多分支结构中,可以一直不断地缩小判断范围进行后续判断。

深入使用Python的必备基础,教你入门Python的好方法

图2-5 屏幕显示处理方式

1.单分支

单分支结构仅在条件成立时执行操作,当条件不成立时什么都不做,其结构为

深入使用Python的必备基础,教你入门Python的好方法

【例2.11】单分支结构实现投篮成绩判断。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,会提示输入成绩,当输入的数值大于90时,输出结果为

深入使用Python的必备基础,教你入门Python的好方法

如果输入的数值小于或等于90,那么程序没有任何输出。

这里涉及如下两个新的知识点:

● 函数input():用来接收用户的输入。

● 函数int():用来完成类型的转换。从函数input()读取的数据是字符串,不能直接与数值比较大小,要使用函数int()将其转换为整型。

【注意】在Python中,不使用大括号来表示语句段的开始和结束,而使用缩进来表示语句的开始和结束。例如,当条件成立时,若要执行的语句有很多行,则直接将这些语句进行相同的缩进。

这样的方式很方便,但是需要额外关注代码的缩进。初学者在使用Python时,经常会因为缩进使用不当而出错,务必恰当地使用缩进。

2.双分支

在双分支结构中,当条件成立时,去做某件事情;当条件不成立时,去做另外一件事情,其结构为

深入使用Python的必备基础,教你入门Python的好方法

【例2.12】双分支结构实现投篮成绩判断。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,会提示输入成绩,若输入的数值大于90,则输出“A级”;若输入的数值小于或等于90,则输出“加油!”。

3.多分支

多分支结构针对多个条件进行判断,根据判断结果执行对应操作。针对投篮游戏的坐标示意图如图2-6所示。

深入使用Python的必备基础,教你入门Python的好方法

图2-6 针对投篮游戏的坐标示意图

这里需要注意的是,第二个判断条件“大于80分”,是在第一个判断条件“大于90分”不成立的情况下的条件,其范围是(80,90]。其他条件类似,都是上一次判断条件不成立情况下的判断条件。

多分支结构中使用“if…elif…else”结构,可以包含多个“elif”,其结构为

深入使用Python的必备基础,教你入门Python的好方法

【例2.13】多分支结构实现投篮成绩判断。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,根据输入不同,结果如下:

● 若输入的数值大于90,则输出“A级”。

● 若输入的数值为(80,90],则输出“B级”。

● 若输入的数值为(70,80],则输出“C级”。

● 若输入的数值为[60,70],则输出“D级”。

● 若输入的数值小于60,则输出“加油”。

4.内联if

可以将if语句简单地写在一行内。此时的语法格式为

深入使用Python的必备基础,教你入门Python的好方法

上述语句的规则是

● 当条件成立时,将语句A作为返回值。

● 当条件不成立时,将该语句B作为返回值。

内联if语句结构如图2-7所示。

深入使用Python的必备基础,教你入门Python的好方法

图2-7 内联if语句结构

【例2.14】使用内联if语句计算两个数值的最大值。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,根据不同输入,会出现不同结果:

● 当输入的值满足a>b时,big=a。例如,输入a=6、b=3,则big=a,输出为“大数是:6”。

● 当输入的值不满足a>b时,big=b。例如,输入a=6、b=9,则big=b,输出为“大数是:9”。

5.条件语句

条件语句通常是由比较语句构成的,返回一个逻辑值(True或False)。使用比较符号可以构成比较语句,常用的比较符号如表2-2所示。

表2-2 常用的比较符号

深入使用Python的必备基础,教你入门Python的好方法

在需要对多个条件进行组合时,可以使用逻辑符号。常用的逻辑符号如表2-3所示。

表2-3 常用的逻辑符号

深入使用Python的必备基础,教你入门Python的好方法

2.5 循环结构

简单来说,循环就是重复做某件事情。循环结构通过控制循环条件来实现某一段程序的重复执行和适时结束,如图2-8所示。

深入使用Python的必备基础,教你入门Python的好方法

图2-8 循环结构

1.for…in循环

使用for…in语句能够遍历一个集合。其语法格式为

深入使用Python的必备基础,教你入门Python的好方法

上述语法针对可迭代对象(集合)展开遍历,其循环次数取决于迭代集合大小。集合可以是列表、元组、字符串等。

【例2.15】使用for…in循环分别遍历列表、元组、字符串。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

若希望输出索引,则可以使用关键字enumerate实现。

【例2.16】使用for…in循环输出索引及对应元素值。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

2.for…in次数循环

使用for…in语句能够实现指定次数的循环,此时,通常借助函数range控制循环次数。range的语法格式为

深入使用Python的必备基础,教你入门Python的好方法

其中,各个参数含义如下:

● 初始值:计数的开始值,可以省略,省略该值时其默认值是0,表示从0开始,如range(5)等价于range(0,5)。

● 终止值:计数到终止值结束,但不包括终止值,如range(1,5)对应[1,2,3,4],不包含5。

● 步长:可以省略,省略该值时,默认为1,如range(1,5)等价于range(1,5,1)。

需要注意的是,range函数返回的是一个可迭代对象,如果想将其转换为列表,那么可以使用list函数实现。例如,通过list(range(1,5))函数可得到一个列表。

【例2.17】使用range函数获取对象及列表。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

【例2.18】通过range函数控制for…in循环执行。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

3.while循环

使用while语句可以实现在某个条件成立的情况下,重复执行循环内的语句,其语法格式为

深入使用Python的必备基础,教你入门Python的好方法

在while循环中当条件为真时,运行循环体。因此,若让循环体不再运行,需保证条件表达式在一定条件下不成立。如果条件表达式一直成立,那么该循环就是一个死循环。死循环通常只用于一些特殊情况,或者微型传感器等永不停歇工作直至报废的装置上。

在while循环中,通常使用一个变量作为循环计数器。通过控制该循环计数器的值,来控制循环执行的次数。

【例2.19】使用while循环实现5次循环。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

本例使用变量i作为循环计数器。设置其初始值为0,当其值小于5时,条件表达式成立,循环得以执行;循环体内,不断地改变i的值,让其增大,使其朝着使循环条件“i<5”不成立的方向发展。最终在i=5时,循环条件不再成立,循环终止。

【例2.20】使用while循环遍历一个列表。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

4.跳出循环break

有时我们希望在满足某个特定的条件时,终止循环的运行,关键字break可以帮助我们达到这个目的,其使用形式一般为

深入使用Python的必备基础,教你入门Python的好方法

上述结构当条件表达式成立时,跳出循环体。

【例2.21】break使用示例。输出列表的值,一旦遇到数值666,就终止后续所有输出。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

【例2.21】尝试使用for…in循环遍历列表a中的所有元素。但是,当条件判断语句“if x==666:”成立时,执行“break”语句。这意味着,一旦遇到数值“666”,就要退出循环,终止继续遍历列表a内其余元素。所以,程序在遍历到数值666后,循环终止运行,数值666及后续所有值都没有被输出。

5.跳出循环continue

有时我们希望在满足某个特定的条件时,终止本次循环,继续运行下一次循环。关键字continue可以帮助我们达到这个目的,其使用形式一般为

深入使用Python的必备基础,教你入门Python的好方法

对于上述结构,当条件表达式成立时,忽略当次循环中剩下的语句,继续执行下一次循环。

【例2.22】continue使用示例。输出列表的值,在遇到数值666时,不输出该值。

深入使用Python的必备基础,教你入门Python的好方法

运行程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

【例2.22】尝试使用for…in循环遍历列表a中的所有元素。但是,当条件判断语句“if x==666:”成立时,执行“continue”语句。这意味着,一旦遇到数值“666”,就要退出本次循环,放弃本次循环中后续语句,继续执行下一次循环。所以,在遇到数值666后,终止本次循环后续语句(print语句)的运行,继续执行下一次循环。在下一次循环中,遇到数值“999”,if语句不成立,执行print语句将数值“999”输出。之后继续执行下一次循环,直至循环结束。

2.6 函数

本节内容分为三部分:2.6.1节将从词义、作用、构成等角度介绍什么是函数;2.6.2节将介绍内置函数的基本使用方法;2.6.3节将简单介绍自定义函数。

2.6.1 什么是函数

函数是一个处理器,是一个将“输入”处理为“输出”的工具。在使用榨汁机将水果变为果汁的场景中,榨汁机就是一个函数。图2-9所示为函数和榨汁机的对比示意图。

深入使用Python的必备基础,教你入门Python的好方法

图2-9 函数和榨汁机的对比示意图

在数学或者计算机中,我们尝试构造不同的函数来解决不同的问题。这里的函数本质上是指,通过对输入进行有效处理,得到输出结果。我们可以利用函数解决各种各样的问题,这些问题可以是计算绝对值、计算最大值等相对简单的数学问题,也可以是复杂的现实问题。例如,利用canny函数可以得到原始图像(图2-10左侧图像)对应的canny边缘(图2-10右侧图像)。

深入使用Python的必备基础,教你入门Python的好方法

图2-10 canny函数处理示例

无论在生活中还是在数学或者计算机中,函数的输入和输出都存在较强的相关性。也就是说,通过一定的变换,能够将输入变为输出,这种变换必须是科学的。例如,我们可以构造一个实现输入水输出水蒸气,甚至氧气的函数,但是不可以构造一个输入水输出油的函数。

清代的数学家李善兰与英国传教士伟烈亚力(Alexander Wylie)合译《代数学》时,将函数解释为“凡此变量中函(包含)彼变量者,则此为彼之函数”。

“函”作为动词使用是“包含、容纳”的意思。我们在2.2.1节中介绍了“变量”的概念。一般来说,我们把输入称为自变量,输出称为因变量。因此,可以将上述翻译理解为“函数作为一种变量(因变量),包含着另外一个变量(自变量)”。

“函”作为名词使用是“匣、盒”的意思,从这个角度讲,函数是一个盒子。进一步讲,这个盒子可能是个“黑盒”,也可能是个“白盒”。函数示意图如图2-11所示。

● 黑盒角度:作为使用函数的用户,不需要关心函数内部的构造。Python提供了非常多函数,直接使用这些函数就能够完成非常复杂的工作。类似于,使用榨汁机,不用关心它是怎么工作的,把水果放进去后,只需按下开关就能得到果汁。第三方模块提供了大量实用函数,本书主要使用OpenCV模块,该模块包含大量用于图像处理的实用函数。直接把输入交给相应的函数,即可得到返回结果。不同的函数对应不同的功能,我们需要做的是找到能解决问题的特定函数,无须关心它内部是如何工作的。

● 白盒角度:作为开发函数的程序员,需要编写程序,从而完成将输入转换为输出的工作。这类似于,开发榨汁机的工程师需要关注实现的每一个技术细节。

深入使用Python的必备基础,教你入门Python的好方法

图2-11 函数示意图

横看成岭侧成峰,远近高低各不同。针对同一个对象,当我们从不同角度去解析时,更能避免陷入盲人摸象的境地。从实践的角度,一般把函数划分为如下三类:

● 内置函数:Python自带的,实践中使用非常频繁的函数。

● 自定义函数:通常指程序员自己定义的函数。

● 模块:把一些函数单独地放在称为模块的文件中,这些函数就被称为模块。这些函数可能是Python自带的,也可能是由第三方开发的。

2.6.2 内置函数

内置函数,是指Python系统内自带的函数。常用语言包含了大量的被频繁使用的内置函数,如数学计算函数等。Python包含了abs、pow、sorted、max、min、sum等函数。下面以一个示例来说明其具体用法。

【例2.23】常用函数使用示例。

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

深入使用Python的必备基础,教你入门Python的好方法

2.6.3 自定义函数

可以根据自己的需要自定义一个函数。自定义函数的调用方法与内置函数一致。

在自定义函数时,使用def来定义函数,使用return来返回函数的返回值。自定义函数的语法结构如下:

深入使用Python的必备基础,教你入门Python的好方法

上述语法结构中:

● def表示定义一个函数。关键字def表示从下一行开始的缩进代码都是函数的构成部分。

● 函数名,是指函数的名称。函数名和变量名的定义是一样的,可以根据需要起一个通俗易懂、好记的名字。

● 参数,是指函数的输入,是要处理的对象。例如,在计算一个圆的面积时,输入就是该圆的半径。简单来说,参数是交给函数的数据或指令。通常情况下,函数据此与用户进行交互,针对特定的输入进行处理。

● 关键字return后面是函数要返回的处理结果。返回值是函数和用户交互的一种方式,函数通过返回值将处理结果报告给用户。

函数就是“机器人”,用来完成特定的任务。函数对应的参数和返回值的情况如下。

● 参数:一般情况下,只有向机器人发出指令,机器人才会去执行对应的操作。但是,有时并不需要发出指令,机器人就能把事情处理好。例如,某简单的扫地机器人只有开关,打开开关它就开始工作了。这相当于函数没有参数,固定执行某个特定的功能。如果某个函数的功能是计算正方形面积,那么就需要通过参数接收边长值。如果函数只需要计算边长为3的正文形的正方形的面积,那么就不需要输入任何参数,直接在函数内计算边长为3的正方形的面积就可以了。

● 返回值:一般情况下,需要机器人返回处理结果。但是,有时只需要机器人把事情做好就可以了,不需要汇报结果。例如,某个机器人帮助某部门在早晨6点检查数据汇总结果。在检查无误时,并不需要机器人大喊一声:“没有问题啦!”。机器人不汇报处理结果,相当于函数没有返回值,只需默默执行某个特定的功能就好了。如果需要用正方形面积进行后续计算,那么就需要计算正方形面积的函数将面积值返回,以便后续对该面积值进行操作处理。如果只需要将面积值输出,那么就不需要让函数返回任何值,直接在函数内部完成打印即可。

【例2.24】定义具有不同形式的参数、返回值的函数,用于计算边长为3的正方形面积。

表2-4对函数的参数、返回值的示例进行了简要说明。

表2-4 函数的参数与返回值

深入使用Python的必备基础,教你入门Python的好方法

根据上述说明,编写程序如下:

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

从上述程序可以看出:

● 在函数没有返回值时,通常直接调用该函数,让其内部语句得以运行,通过内部语句展示某种形式的运算结果或过程。例如,函数area1、函数area3都没有返回值,使用时直接调用即可。

● 在函数有返回值时,函数表示的就是函数的返回值。此时,可以将函数看作一个普通的变量,它的使用方式与普通变量是一致的,可以作为其他函数的参数。例如,函数area2、函数area4都有返回值,表示的都是各自对应的返回值。因此,这两个函数都可以作为print函数的参数。

2.7 模块

为了方便处理和使用,通常将常用的一些函数组织在一起,保存在一个扩展名为“.py”的文件内,这个文件就是一个模块。因此,模块是函数的集合。

模块对应的英文是“modules”。如果函数是榨汁机,那么模块就是一套厨具组合,这套厨具包含榨汁机、绞肉机、电饭锅等。

通常情况下,可以从以下几个方面来理解模块:

● 来源:可能是系统自带的,也可能是由程序员自发开发并共享的可以被大家任意调用的;还可能是自己定义供自己使用的。

● 作用:可满足特定的需求和目的,如方便网络访问、方便加密处理、方便数学计算、方便数据处理、方便图像处理等。

● 构造:无论是自带模块(标准模块),还是第三方模块,都已经被构造好了,可以直接调用。对于自定义模块,只需把自定义函数放在扩展名为“.py”的文件内,就可完成模块的构造。

● 使用:通常使用“import模块名”语句将模块导入程序。

2.7.1 标准模块

标准模块是非常实用的,Python提供了200多个内置的标准模块。

例如,random模块可以用来处理随机数。该模块提供了众多与随机数处理相关的函数。例如,函数randint(初值,终值)可生成一个介于[初值,终值]的随机整数。

要想使用模块内的函数就要先将模块导入程序,其格式为“import模块名”。例如,使用random模块内的函数,需要先将该模块导入,具体为

深入使用Python的必备基础,教你入门Python的好方法

使用关键字“import”导入标准模块后,可以通过模块名调用其提供的函数,形式为“模块名.函数名”。例如,在导入random模块后,如果要使用其中的函数randint()来生成一个介于[0,9]的随机数,其使用方式是“random.randint(0,9)”。

【例2.25】使用random模块内的randint函数,生成一组介于0~9的随机数。

深入使用Python的必备基础,教你入门Python的好方法

深入使用Python的必备基础,教你入门Python的好方法

运行上述程序,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

若感觉每次调用randint函数都写random.randint比较麻烦,则可以使用“import random as r”语句将r指定为random的缩写形式。指定上述缩写后,每次使用“r.randint()”即可调用randint函数。缩写名称是任意指定的,如random的缩写不一定必须是“r”。

Python中常用的标准模块如下:

● random模块:提供可进行随机选择的函数。

● os模块:提供与操作系统交互的函数。

● sys模块:提供与系统相关的参数和函数。

● time模块:提供与时间相关的函数。

● math模块:提供对浮点数学的底层C库函数的访问。

● re模块:为高级字符串处理提供正则表达式的工具。

2.7.2 第三方模块

在使用第三方模块前,需要先对其进行下载和安装,然后就可以像使用标准模块一样导入并使用了。下载和安装第三方模块可以使用Python提供的pip命令,语法结构为

深入使用Python的必备基础,教你入门Python的好方法

例如,安装用于科学计算的NumPy模块,可以使用的语句为

深入使用Python的必备基础,教你入门Python的好方法

当然,在面临网络不好等情况时,可以直接从PyPI的官网(参考网址1[1])通过“pip install本地路径”语句将要使用的第三方模块安装到本地。

本书主要使用的第三方模块如下:

● NumPy:该模块用于实现科学计算,其提供的数组功能可以非常方便地处理图像。

● OpenCV:高效的图像处理模块,是本书的重点。

● dlib:包含很多机器学习算法,使用起来简单方便。

● matplotlib.pyplot:该模块提供了类似于MATLAB的界面,使用简单的程序即可实现高效的绘图功能。

第三方模块的使用方式与标准模块是一致的,都是先使用关键字import导入,然后通过“模块名.函数名()”的方式调用。

2.7.3 自定义模块

自定义模块是指将一些可能重复使用的函数单独放在一个扩展名为的“.py”文件中。自定义模块的使用方式与标准模块相同。

【例2.26】自定义一个模块,并使用该模块内的函数。

分析:本例题包含两个程序,一个是模块程序(myModules.py),另一个是用来调用模块内函数的程序(例2.26.py)。

模块程序(myModules.py)提供了二次方计算(函数x2)、10倍计算(函数x10)两个不同的函数。

主程序(例2.26.py)分别对模块程序内的函数进行了调用。

myModules.py程序如下:

深入使用Python的必备基础,教你入门Python的好方法

例2.26.py程序如下:

深入使用Python的必备基础,教你入门Python的好方法

运行程序例2.25.py,输出结果如下:

深入使用Python的必备基础,教你入门Python的好方法

[1] 所有参考网址可通过扫描本书封底二维码后输入书号获取。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/21782.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信