
python教案
罗杰斯人本主义-xxx72
2023年2月19日发(作者:涡流加热)..
.!.
《Python程序设计》
教学大纲
大学计算机科学与技术学院
2015年10月
课程性质与设置目的要求(前言)
《Python程序设计》课程是计算机科学与技术学院各专业的专业选修课程。
Python是一门开源的高级动态编程语言,支持命令式编程、函数式编程、面向对
象程序设计,语法简洁清晰,并且拥有大量功能丰富而强大的标准库和扩展库。
本课程将从Python语言的实现机制入手,结合示例程序和上机实验,较为系统
地介绍Python语言的主要特征和编程技术。
设置本课程的目的是:使学习者在全面了解Python技术历史、现状与发展
趋势的基础上,系统掌握Python基本概念、编程思想以及程序设计技术,具备
熟练的Python编程技能和面向对象软件设计技术思想,完成本课程的学习后能
够熟练地综合应用Python技术和面向对象的思想编写程序解决现实生活中的问
题,最终提高程序设计水平和计算机应用能力,从而能胜任企业软件研发以及科
研院所的研发、教学任务。
学习本课程的要:学习者应理解Python的编程模式,熟练运用Python列表、
元组、字典、集合等基本数据类型以及相关列表推导式、切片等特性来解决实际
问题,熟练掌握Python分支结构、循环结构、函数设计以及类的设计与使用,
熟练使用正则表达式处理字符串,同时掌握不同领域的Python扩展模块,并能
够解决实际问题。
先修课程要求:无
..
.!.
本课程计划34学时,2学分。
选用教材:董付国.Python程序设计(第2版).:清华大学,2016.5.
考核方法:考查
教学进程安排表:
周
次
学
时
数
教学主要容
教学
环节
备
注
13
Python的安装与使用
Python扩展库的管理
Python中的数据类型
讲课
23
Python中的置函数、基本输入输出
Python代码编写规
Python文件名和程序运行
讲课
33Python中的列表使用讲课
43Python中的元组、字典及集合的使用讲课
53选择和循环结构讲课
..
.!.
63字符串和正则表达式讲课
73函数的设计与使用讲课
83
类的定义与使用
类的方法和属性
讲课
93
文本文件的基本操作
二进制文件操作
文件操作和目录操作
讲课
103
异常处理结构与程序调试
GUI编程
讲课
113+1
网络程序设计
多线程编程
课程随堂测试
讲课+
测试
第一章基础知识
一、学习目的
Python语言的发展过程、安装及简单使用;Python程序设计中的基本知识;Python
代码的编写规;Python文件名的要求;Python程序的运行方式;编写自己的包以及基本
示例。本章计划6学时。
二、课程容
..
.!.
1.0Python是一种怎样的语言
Python是一门跨平台、开源、免费的解释型高级动态编程语言,同时也支持伪编译
将Python源程序转换为字节码来优化程序和提高运行速度。
Python支持命令式编程、函数式编程,完全支持面向对象程序设计,语法简洁清晰,
并且拥有大量的几乎支持所有领域应用开发的成熟扩展库。
1.1如何选择Python版本
多版本共存与切换简便方法:更改系统环境变量path
查看已安装版本的方法
有时候可能需要同时安装多个不同的版本,并根据不同的开发需求在两个版本之间
进行切换。
1.2Python安装与简单使用
默认编程环境:IDLE
1.3使用pip管理第三方包
Python2中需要单独安装
下载地址:/pypi/pip
安装方法:cmd==>
用法示例
Python3安装包中已默认包含pip
1.4.1Python的对象模型
对象是python语言中最基本的概念,在python中处理的每样东西都是对象。python
中有许多置对象可供编程者使用,置对象可直接使用,如数字、字符串、列表、del等;
非置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random()等。
常用置对象
1.4.2Python变量
在Python中,不需要事先声明变量名及其类型,直接赋值即可创建各种类型的对
象变量。
虽然不需要在使用之前显式地声明变量及其类型,但是Python仍属于强类型编程
语言。
Python还是一种动态类型语言
Python采用的是基于值的存管理方式
Python具有自动存管理功能
在定义变量名的时候,需要注意的问题。
1.4.3数字
数字是python中最常用的对象,属于不可变对象。
可以表示任意大小的数字。
1.4.4字符串
用单引号、双引号或三引号括起来的符号系列称为字符串
单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串。
..
.!.
1.字符串合并
2.字符串格式化
3.转义字符
1.4.5操作符和表达式
Python中很多运算符有多重含义,在程序中运算符的具体含义取决于操作数的类
型。
在Python中,单个任何类型的对象或常数属于合法表达式。
1.4.6常用置函数
置函数不需要导入任何模块即可使用
执行下面的命令可以列出所有置函数
>>>dir(__builtins__)
1.4.7对象的删除
在Python中具有自动存管理功能。
可以使用del命令来显式删除对象并解除与值之间的指向关系。
1.4.8基本输入输出
用Python进行程序设计,输入是通过input()函数来实现的。
尽管形式一样,Python2.x和Python3.x对该函数的解释略有不同。
1.4.9模块的使用
Python默认安装仅包含部分基本或核心模块,但用户可以安装大量的扩展模块,pip
是管理模块的重要工具
import模块名
1.5Python代码规
(1)缩进
(2)注释
(3)每个import只导入一个模块
(4)如果一行语句太长,可以在行尾加上来换行分成多行,但是更建议使用括号
来包含多行容。
(5)必要的空格与空行
(6)适当使用异常处理结构进行容错,后面将详细讲解。
(7)软件应具有较强的可测试性,测试与开发齐头并进。
1.6Python文件名
1.7Python脚本的“__name__”属性
1.8编写自己的包与模块
包可以看做处于同一目录中的模块。
1.9Python快速入门
问题1:用户输入一个三位自然数,计算并输出其佰位、十位和个位上的数字。
问题2:已知三角形的两边长及其夹角,求第三边长。
问题3:任意输入三个英文单词,按字典顺序输出。
..
.!.
三、重点、难点提示
(一)Python中的对象
(二)Python代码的编写规
四、思考与练习
安装Python开发包,并练习使用pip管理扩展库
编程实现教材上的示例
习题1.10
第二章Python数据结构
一、学习目的
Python中的数据结构,包括列表、元祖、字典、集合以及其他基本数据结构。本章
计划6学时。
二、课程容
2.1列表
列表是Python中置可变序列,是若干元素的有序集合,列表中的每一个数据称为
元素,列表的所有元素放在一对中括号“[”和“]”中,并使用逗号分隔开;
当列表元素增加或删除时,列表对象自动进行扩展或收缩存,保证元素之间没有缝
隙;
在Python中,一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、
字符串等基本类型,甚至是列表、元素、字典、集合以及其他自定义类型的对象。
列表创建与删除
列表元素的增加
列表元素的删除
列表元素访问与计数
成员资格判断
切片操作
列表排序
用于序列操作的常用置函数
列表推导式
2.2元组
..
.!.
元组和列表类似,但属于不可变序列,元组一旦创建,用任何方法都不可以修改其
元素。
元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号“(”和“)”
中,而不是方括号中。
元组创建与删除
元组与列表的区别
序列解包
生成器推导式
2.3字典
字典是键值对的无序可变集合。
定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放
在一对大括号“{”和“}”中。
字典中的每个元素包含两部分:键和值,向字典添加一个键的同时,必须为该键增
添一个值。
字典中的键可以为任意不可变数据,比如整数、实数、复数、字符串、元组等等。
字典中的键不允许重复。
globals()返回包含当前作用域所有全局变量和值的字典
locals()返回包含当前作用域所有局部变量和值的字典
字典创建与删除
字典元素的读取
字典元素的添加与修改
字典应用案例
有序字典
字典推导式
2.4集合
集合是无序可变集合,使用一对大括号界定,元素不可重复。
集合的创建与删除
集合操作
集合推导式
2.5再谈置方法sorted()
2.6其他数据结构
在Python中,除了基本序列之外,还有其他一些常用的数据结构,如堆、栈、队
列、树、图等等。有些结构Python已经提供,而有些则需要自己利用基本数据结构来
实现。
堆
队列
栈
链表
..
.!.
二叉树
有向图
三、重点、难点提示
(一)Python中的常见数据结构及其使用差异
(二)Python运算符的多重含义
四、思考与练习
编程实现教材上的示例
习题2.3/2.5/2.9/2.10
第三章选择与循环
一、学习目的
Python中的运算符和条件表达式;选择结构和循环结构的基本使用。本章计划3学
时。
二、课程容
3.1条件表达式
算术运算符:+、-、*、/、//、%、**
关系运算符:>、<、==、=、!=,可以连续使用
测试运算符:in、notin、is、isnot
逻辑运算符:and、or、not,注意短路求值
位运算符:~、&、|、^、<>
3.2选择结构
单分支选择结构
双分支结构
多分支结构
选择结构的嵌套
选择结构应用
3.3循环结构
for循环与while循环
Python提供了两种基本的循环结构语句——while语句、for语句。
while循环一般用于循环次数难以提前确定的情况,也可以用于循环次数确定的情
况;
..
.!.
for循环一般用于循环次数可以提前确定的情况,尤其是用于枚举序列或迭代对象
中的元素;
一般优先考虑使用for循环。
相同或不同的循环结构之间都可以互相嵌套,实现更为复杂的逻辑。
循环结构的优化
为了优化程序以获得更高的效率和运行速度,在编写循环语句时,应尽量减少循环
部不必要的计算,将与循环变量无关的代码尽可能地提取到循环之外。对于使用多重循
环嵌套的情况,应尽量减少层循环中不必要的计算,尽可能地向外提。
3.4break和continue语句
break语句在while循环和for循环中都可以使用,一般放在if选择结构中,一旦break
语句被执行,将使得整个循环提前结束。
continue语句的作用是终止当前循环,并忽略continue之后的语句,然后回到循环
的顶端,提前进入下一次循环。
除非break语句让代码更简单或更清晰,否则不要轻易使用。
3.5案例精选
三、重点、难点提示
(一)Python的关系运算符和条件表达式
(二)Python中的代码缩进
(三)循环代码的优化
四、思考与练习
编程实现教材上的示例
习题3.5/3.7/3.8
第四章字符串与正则表达式
一、学习目的
Python中的字符串及字符串的常用方法;正则表达式的基本容及综合运用。本章计
划3学时。
二、课程容
4.1字符串
..
.!.
在Python中,字符串也属于序列类型,除了支持序列通用方法(包括分片操作)
以外,还支持特有的字符串操作方法。
字符串属于不可变序列类型
Python字符串驻留机制:对于短字符串,将其赋值给多个不同的对象时,存中只有
一个副本,多个对象共享该副本。长字符串不遵守驻留机制。
判断一个变量s是否为字符串,应使用isinstance(s,basestring)。在Python3之前,
字符串有str和unicode两种,其基类都是basestring。在Python3之后合二为一了。
在Python3中,程序源文件默认为UTF-8编码,全面支持中文,字符串对象不再有
encode和decode方法。
字符串格式化
字符串常用方法
字符串常量
4.2正则表达式
正则表达式是字符串处理的有力工具和技术。
正则表达式使用某种预定义的模式去匹配一类具有共同特征的字符串,主要用于处
理字符串,可以快速、准确地完成复杂的查找、替换等处理要求。
Python中,re模块提供了正则表达式操作所需要的功能。
正则表达式元字符
.:匹配除换行符以外的任意单个字符
*:匹配位于*之前的0个或多个字符
+:匹配位于+之前的一个或多个字符
|:匹配位于|之前或之后的字符
^:匹配行首,匹配以^后面的字符开头的字符串
$:匹配行尾,匹配以$之前的字符结束的字符串
":匹配位于"之前的0个或1个字符
:表示位于之后的为转义字符
[]:匹配位于[]中的任意一个字符
-:用在[]之用来表示围
():将位于()的容作为一个整体来对待
{}:按{}中的次数进行匹配
b:匹配单词头或单词尾
B:与b含义相反
d:匹配任何数字,相当于[0-9]
D:与d含义相反
s:匹配任何空白字符
S:与s含义相反
w:匹配任何字母、数字以及下划线,相当于[a-zA-Z0-9_]
W:与w含义相反
..
.!.
re模块主要方法
pile(pattern[,flags]):创建模式对象
search(pattern,string[,flags]):在字符串中寻找模式
match(pattern,string[,flags]):从字符串的开始处匹配模式
findall(pattern,string[,flags]):列出字符串中模式的所有匹配项
split(pattern,string[,maxsplit=0]):根据模式匹配项分割字符串
sub(pat,repl,string[,count=0]):将字符串中所有pat的匹配项用repl替换
escape(string):将字符串中所有特殊正则表达式字符转义
直接使用re模块方法
使用正则表达式对象
子模式与match对象
正则表达式应用案例
三、重点、难点提示
(一)正则表达式子模块扩展语法
(二)字符串编码,字符串格式化
四、思考与练习
编程实现教材上的示例
习题4.2/4.3/4.5
第五章函数设计与使用
一、学习目的
Python中函数的定义方法;参数类型;变量作用域。本章计划3学时。
二、课程容
5.1函数定义
def函数名([参数列表]):
'''注释'''
函数体
5.2形参与实参
函数定义时括弧为形参,一个函数可以没有形参,但是括弧必须要有,表示该函数
不接受参数。
函数调用时向其传递实参,将实参的值或引用传递给形参。
..
.!.
在函数直接修改形参的值不影响实参。
5.3参数类型
在Python中,函数参数有很多种:可以为普通参数、默认值参数、关键参数、可
变长度参数等等。
Python函数的定义非常灵活,在定义函数时不需要指定参数的类型,也不需要指定
函数的类型,完全由调用者决定,类似于重载和泛型;
函数编写如果有问题,只有在调用时才能被发现,传递某些参数时执行正确,而传
递另一些类型的参数时则出现错误。
默认值参数
def函数名(形参名=默认值,……)
函数体
默认值参数必须出现在函数参数列表的最右端,且任何一个默认值参数右边不能有
非默认值参数。
调用带有默认值参数的函数时,可以不对默认值参数进行赋值,也可以赋值,具有
较大的灵活性。
关键参数
关键参数主要指实参,即调用函数时的参数传递方式。
通过关键参数传递,实参顺序可以和形参顺序不一致,但不影响传递结果,避免了
用户需要牢记位置参数顺序的麻烦。
可变长度参数
可变长度参数主要有两种形式:*parameter和**parameter,前者用来接受多个实参
并将其放在一个元组中,后者接受字典形式的实参。
参数传递的序列解包
传递参数时,可以通过在实参序列前加星号将其解包,然后传递给多个单变量形参。
5.4return语句
return语句用来从一个函数中返回,即跳出函数,也可用return语句从函数中返回
一个值。
如果函数没有return语句,Python将认为该函数以returnNone结束。
5.5变量作用域
变量起作用的围称为变量的作用域。
一个变量在函数外部定义和在函数部定义,其作用域是不同的。
局部变量的引用比全局变量速度快。
三、重点、难点提示
(一)默认值参数,关键参数,可变长度参数,参数传递时的序列解包
(二)Lambda表达式
..
.!.
四、思考与练习
编程实现教材上的示例
习题5.2/5.3/5.10
第六章面向对象程序设计
一、学习目的
Python中类的定义与使用;类的方法;Python2和Python3中的类的属性。本章计
划3学时。
二、课程容
6.1类的定义与使用
类定义语法
Python使用class关键字来定义类,class关键字之后是一个空格,然后是类的名字,
再然后是一个冒号,最后换行并定义类的部实现。类名的首字母一般要大写,当然您也
可以按照自己的习惯定义类名,但是一般推荐参考惯例来命名,并在整个系统的设计和
实现中保持风格一致,这一点对于团队合作尤其重要。例如:
定义了类之后,可以用来实例化对象,并通过“对象名.成员”的方式来访问其中的
数据成员或成员方法,例如下面的代码:
Python提供了一个关键字“pass”,类似于空语句,可以用在类和函数的定义中或
者选择结构中。当暂时没有确定如何实现功能,或者为以后的软件升级预留空间,或者
其他类型功能时,可以使用该关键字来“占位”。
self参数
类的所有实例方法都必须至少有一个名为“self”的参数,并且必须是方法的第一
个形参(如果有多个形参的话),“self”参数代表将来要创建的对象本身。在类的实
例方法中访问实例属性时需要以“self”为前缀,但在外部通过对象名调用对象方法时
并不需要传递这个参数,如果在外部通过类名调用对象方法则需要显式为self参数传值。
在Python中,在类中定义实例方法时将第一个参数定义为“self”只是一个习惯,
而实际上类的实例方法中第一个参数的名字是可以变化的,而不必须使用“self”这个
名字。
类成员与实例成员
这里主要指数据成员,或者广义上的属性。可以说属性有两种,一种是实例属性,
另一种是类属性。实例属性一般是指在构造函数__init__()中定义的,定义和使用时必须
以self作为前缀;类属性是在类中所有方法之外定义的数据成员。在主程序中(或类的
外部),实例属性属于实例(对象),只能通过对象名访问;而类属性属于类,可以通过
类名或对象名访问。
..
.!.
在类的方法中可以调用类本身的其他方法,也可以访问类属性以及对象属性。在
Python中比较特殊的是,可以动态地为类和对象增加成员,这一点是和很多面向对象程
序设计语言不同的,也是Python动态类型特点的一种重要体现。
私有成员与公有成员
Python并没有对私有成员提供严格的访问保护机制。在定义类的属性时,如果属性
名以两个下划线“__”开头则表示是私有属性,否则是公有属性。私有属性在类的外部
不能直接访问,需要通过调用对象的公有成员方法来访问,或者通过Python支持的特
殊方式来访问。Python提供了访问私有属性的特殊方式,可用于程序的测试和调试,对
于成员方法也具有同样的性质。
私有属性是为了数据封装和而设的属性,一般只能在类的成员方法(类的部)中使
用访问,虽然Python支持一种特殊的方式来从外部直接访问类的私有成员,但是并不
推荐您这样做。公有属性是可以公开使用的,既可以在类的部进行访问,也可以在外部
程序中使用。
在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义
中。用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员:
_**x:这样的对象叫做保护成员,不能用'frommoduleimport*'导入,只有类对象和
子类对象能访问这些成员;
__**x__:系统定义的特殊成员;
__**x:类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成
员,但在对象外部可以通过“对象名._类名__**x”这样的特殊方式来访问。Python中不
存在严格意义上的私有成员。
6.2方法
在类中定义的方法可以粗略分为四大类:公有方法、私有方法、静态方法和类方法。
其中,公有方法、私有方法都属于对象,私有方法的名字以两个下划线“__”开始,每
个对象都有自己的公有方法和私有方法,在这两类方法中可以访问属于类和对象的成
员;公有方法通过对象名直接调用,私有方法不能通过对象名直接调用,只能在属于对
象的方法过“self”调用或在外部通过Python支持的特殊方式来调用。如果通过类名来
调用属于对象的公有方法,需要显式为该方法的“self”参数传递一个对象名,用来明
确指定访问哪个对象的数据成员。静态方法和类方法都可以通过类名和对象名调用,但
不能直接访问属于对象的成员,只能访问属于类的成员。一般将“cls”作为类方法的第
一个参数名称,但也可以使用其他的名字作为参数,并且在调用类方法时不需要为该参
数传递值。
6.3属性
Python2.x和Python3.x对属性的实现和处理方式不一样,部实现有较大的差异,使
用时应注意二者之间的区别。
Python2.x中的属性
Python3.x中的属性
..
.!.
在Python3.x中,属性得到了较为完整的实现,支持更加全面的保护机制。例如下
面的代码所示,如果设置属性为只读,则无法修改其值,也无法为对象增加与属性同名
的新成员,同时,也无法删除对象属性。
6.4常用特殊方法
Python类有大量的特殊方法,其中比较常见的是构造函数和析构函数。Python中类
的构造函数是__init__(),一般用来为数据成员设置初值或进行其他必要的初始化工作,
在创建对象时被自动调用和执行,可以通过为构造函数定义默认值参数来实现类似于其
他语言中构造函数重载的目的。如果用户没有设计构造函数,Python将提供一个默认的
构造函数用来进行必要的初始化工作。Python中类的析构函数是__del__(),一般用来释
放对象占用的资源,在Python删除对象和收回对象空间时被自动调用和执行。如果用
户没有编写析构函数,Python将提供一个默认的析构函数进行必要的清理工作。
6.5继承机制
继承是为代码复用和设计复用而设计的,是面向对象程序设计的重要特性之一。当
我们设计一个新类时,如果可以继承一个已有的设计良好的类然后进行二次开发,无疑
会大幅度减少开发工作量。在继承关系中,已有的、设计好的类称为父类或基类,新设
计的类称为子类或派生类。派生类可以继承父类的公有成员,但是不能继承其私有成员。
如果需要在派生类中调用基类的方法,可以使用置函数super()或者通过“基类名.方法
名()”的方式来实现这一目的。
Python支持多继承,如果父类中有相同的方法名,而在子类中使用时没有指定父类
名,则Python解释器将从左向右按顺序进行搜索。
三、重点、难点提示
(一)Python对象的可变性
(二)属性的定义与使用
四、思考与练习
编程实现教材上的示例
习题6.1/6.2
第七章文件操作
一、学习目的
文本文件的基本操作;二进制文件的基本操作;文件操作和目录操作。本章计划3
学时。
..
.!.
二、课程容
7.1文件基本操作
文件对象名=open(文件名[,打开方式[,缓冲区]])
(1)文件名指定了被打开的文件名称。
(2)打开模式指定了打开文件后的处理方式。
(3)缓冲区指定了读写文件的缓存模式。0表示不缓存,1表示缓存,如大于1则
表示缓冲区的大小。默认值是缓存模式。
(4)open()函数返回1个文件对象,该对象可以对文件进行各种操作。
7.2文本文件基本操作
使用with自动关闭资源。可以在代码块执行完毕后还原进入该代码块时的现场。
不论何种原因跳出with块,总能保证文件被正确关闭。
7.3二进制文件操作案例精选
数据库文件、图像文件、可执行文件、音视频文件、Office文档等等均属于二进制
文件。对于二进制文件,不能使用记事本或其他文本编辑软件进行正常读写,也无法通
过Python的文件对象直接读取和理解二进制文件的容。必须正确理解二进制文件结构
和序列化规则,才能准确地理解二进制文件容并且设计正确的反序列化规则。所谓序列
化,简单地说就是把存中的数据在不丢失其类型信息的情况下转成对象的二进制形式的
过程,对象序列化后的形式经过正确的反序列化过程应该能够准确无误地恢复为原来的
对象。
Python中常用的序列化模块有struct、pickle、json、marshal和shelve,其中pickle
有C语言实现的cPickle,速度约提高1000倍,应优先考虑使用。
使用pickle模块
使用struct模块
7.4文件级操作
如果仅需要对文件容进行读写,可以使用7.1节中介绍的文件对象;如果需要处理
文件路径,可以使用模块中的对象和方法;如果需要使用命令行读取文件容可
以使用fileinput模块;创建临时文件和文件夹可以使用tempfile模块;另外,Python3.4
的pathlib模块提供了大量用于表示和处理文件系统路径的类。
os与模块
shutil模块
7.5目录操作
7.6高级话题
计算CRC32值(Python2.7.x)
计算CRC32值(Python3.x版本)
计算文本文件中最长行的长度
计算MD5值(Python2.7.x版本)
判断一个文件是否为GIF图像文件
..
.!.
比较两个文本文件是否相同
使用xlwt写入Excel文件
使用xlrd读取Excel文件
使用Pywin32操作Excel文件
检查word文档的连续重复字
三、重点、难点提示
(一)文件操作三步骤
(二)二进制文件读写方式,序列化模块pickle与struct
(三)遍历文件夹时递归的应用
四、思考与练习
编程实现教材上的示例
习题7.1/7.2/7.5
第八章异常处理结构与程序调试
一、学习目的
异常处理的基本概念;Python中的异常处理结构。本章计划1学时。
二、课程容
8.1什么是异常
语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小
写拼写错误而访问不存在的对象。
当Python检测到一个错误时,解释器就会指出当前流已无法继续执行下去,这时
候就出现了异常。异常是指因为程序出错而在正常控制流以外采取的行为。
异常分为两个阶段:第一个阶段是引起异常发生的错误;第二个阶段是检测并处理
阶段。
不建议使用异常来代替常规的检查,如if...else判断。
应避免过多依赖于异常处理机制。
当程序出现错误,python会自动引发异常,也可以通过raise显式地引发异常。
8.2Python中的异常类
BaseException
+--SystemExit
..
.!.
+--KeyboardInterrupt
+--GeneratorExit
+--Exception
+--StopIteration
+--ArithmeticError
|+--FloatingPointError
|+--OverflowError
|+--ZeroDivisionError
+--AssertionError
+--AttributeError
+--BufferError
+--EOFError
+--ImportError
+--LookupError
|+--IndexError
|+--KeyError
+--MemoryError
+--NameError
|+--UnboundLocalError
+--OSError
|+--BlockingIOError
|+--ChildProcessError
|+--ConnectionError
||+--BrokenPipeError
||+--ConnectionAbortedError
||+--ConnectionRefusedError
||+--ConnectionResetError
|+--FileExistsError
|+--FileNotFoundError
|+--InterruptedError
|+--IsADirectoryError
|+--NotADirectoryError
|+--PermissionError
|+--ProcessLookupError
|+--TimeoutError
+--ReferenceError
+--RuntimeError
|+--NotImplementedError
..
.!.
+--SyntaxError
|+--IndentationError
|+--TabError
+--SystemError
+--TypeError
+--ValueError
|+--UnicodeError
|+--UnicodeDecodeError
|+--UnicodeEncodeError
|+--UnicodeTranslateError
+--Warning
+--DeprecationWarning
+--PendingDeprecationWarning
+--RuntimeWarning
+--SyntaxWarning
+--UserWarning
+--FutureWarning
+--ImportWarning
+--UnicodeWarning
+--BytesWarning
+--ResourceWarning
可以继承Python置异常类来实现自定义的异常类。
8.3try...except...else结构
try子句中的代码块放置可能出现异常的语句,except子句中的代码块处理异常。
如果try围捕获了异常,就执行except块;如果try围没有捕获异常,就执行else
块。
8.4断言与上下文管理
断言与上下文管理是两种比较特殊的异常处理方式,在形式上比异常处理结构要简
单一些。
8.4.1断言
断言语句的语法是:
assertexpression[,reason]
当判断表达式expression为真时,什么都不做;如果表达式为假,则抛出异常。
assert语句一般用于开发程序时对特定必须满足的条件进行验证,仅当__debug__
为True时有效。当Python脚本以-O选项编译为字节码文件时,assert语句将被移除以
提高运行速度。
8.4.2上下文管理
使用with自动关闭资源,可以在代码块执行完毕后还原进入该代码块时的现场。
..
.!.
不论何种原因跳出with块,不论是否发生异常,总能保证文件被正确关闭,资源被
正确释放。
with语句的语法如下:
withcontext_expr[asvar]:
with块
三、重点、难点提示
(一)异常的概念与表现形式
(二)常见异常处理结构
(三)使用IDLE调试代码
四、思考与练习
编程实现教材上的示例
第九章GUI编程
一、学习目的
Python中GUI编程的基本方法;GUI中的常见组件。本章计划2学时。
二、课程容
建立GUI程序的三大步骤:
1)导入必需的wxPython包或其他包
2)建立框架类:框架类的父类为,在框架类的构造函数中必须调用父类
的构造函数。
3)建立主程序:通常做4件事——建立应用程序对象、建立框架类对象、显示框
架、建立事件循环
-执行(True)后,框架才看得见
-执行op()后,框架才能处理事件。
如需在窗体上增加其他控件,可在构造函数中增加代码
如需处理事件,可增加框架类的成员函数。
9.1Frame
Frame:框架(窗体),容器,可移动、缩放,包含标题栏、菜单等。是所有框架
的父类。
wxPython的ID参数:
..
.!.
可以明确给构造函数传递一个正整数,由程序员自行保证ID不重复并且没有重用
预定义的ID号,如_OK、_CANCEL等ID号对应的数值;
9.2Controls
如需在窗体上增加其他控件,可在构造函数中增加代码。
如需处理事件,可增加框架类的成员函数。
常用的控件主要有按钮、静态文本标签、文本框、单选钮、复选框、对话框、菜单
等等
Button、StaticText、TextCtrl
Menu
ToolBar、StatusBar
对话框
RadioButton、CheckBox
RadioButton、CheckBox
boBox
ListBox
TreeCtrl
三、重点、难点提示
(一)wxPython基础知识
(二)各类GUI控件的使用
四、思考与练习
编程实现教材上的示例
习题9.1/9.2
第十章网络程序设计
一、学习目的
UDP和TCP编程;网页容的读取;使用Python开发的基本方法。本章计划2学时。
二、课程容
Socket对象是网络通信的基础,相当于在发送端和接收端之间建立了一个管道来实
现相互传递数据。
Python对Socket进行了二次封装,简化了程序的开发步骤,提高了开发效率。
Python提供了socket模块,提供了socket接口的访问。
..
.!.
Python还提供了大量模块可以对网页容进行抓取和处理。
10.1计算机网络基础知识
网络体系结构,分层设计的好处
ftp、http、smtp、pop3、telnet……
TCP、UDP、端口号
IP地址
MAC地址
10.2UDP和TCP编程
UDP协议编程
socket([family[,type[,proto]]])
创建一个socket对象,其中family为_INET表示IPV4,_INET6表
示IPV6;type为SOCK_STREAM表示TCP协议,SOCK_DGRAM表示UDP协议。
sendto(string,address)
把string指定的容发送给address指定的地址,address是一个元组,格式为(IP地址,
端口号)
recvfrom(bufsize[,flags])
接收数据
TCP编程
connect(address)
连接远程计算机
send(bytes[,flags])
发送数据
recv(bufsize[,flags])
接收数据
bind(address)
绑定地址
listen(backlog)
开始监听,等待客户端连接
accept()
响应客户端的请求
10.3简单嗅探器实现
10.4网页容读取
在Python2中提供了urllib和urllib2两个模块用来读取网页容,在Python3中重新进
行了整合,只提供urllib一个模块。
Python2中的urllib模块在Python3中被分成了t,和
三部分,目前只支持HTTP,(versions0.9and1.0),FTP和localfiles三种协议。
urllib2模块在Python3中被合并到t和中去了。
10.5使用Python开发
..
.!.
Python是一门脚本语言,完全可以像PHP、VBScript等脚本语言一样用来开发网页
以及CGI程序。既可以直接编写Python脚本程序来生成网页,也可以把Python程序嵌
入“.asp”文件,无论使用哪种方式,都可以使用服务器上已安装的所有Python扩展模
块,同时也要遵守缩进以及其他格式要求,如同编写Python程序一样。
10.6使用web2py框架开发
Zope2、、Pyramid、CubicWeb、Django和web2py是目前比较流行的支持Python
的开发框架。尽管每个框架都有自己的特色和独到之处,但其中用户推荐度较高的当属
web2py,该框架中集成了用户认证、数据库操作、模板系统、Form表单等大量功能组
件,能够完成开发中的常用功能。开发者通过组合不同的功能组件,再加上自己实现的
业务逻辑,就像搭积木一样来快速开发web应用。
三、重点、难点提示
(一)UDP协议与TCP协议的区别与实现
(二)嗅探器工作原理
四、思考与练习
编程实现教材上的示例
习题10.2/10.4
第十三章多线程编程
一、学习目的
Thread对象;线程同步技术。本章计划1学时。
二、课程容
13.1threading模块
_count():返回当前处于alive状态的Thread对象数量
t_thread():返回当前Thread对象
_ident():返回当前线程的线程标识符,是一个非负整数,并没特殊含
义,该整数可能会被循环利用。newinPython3.3
ate():返回当前处于alive状态的所有Thread对象列表
_thread():返回主线程对象,即启动Python解释器的线程对象。newin
Python3.4
..
.!.
_size([size]):返回创建线程时使用的栈的大小,如果指定size参数,
则用来指定后续创建的线程使用的栈大小,size必须是0(表示使用系统默认值)或大
于32K的正整数
13.2Thread对象
可以通过为Thread类的构造函数传递一个可调用对象来创建线程。
可以继承类创建派生类,并重写__init__和run方法,实现自定义线
程对象类。
创建了线程对象以后,可以调用其start()方法来启动,该方法自动调用该类对象的
run方法,此时该线程处于alive状态,直至run方法结束。
13.3线程同步技术之Lock/RLock对象
Lock是比较低级的同步原语,当被锁定以后不属于特定的线程。
一个锁有两种状态:locked和unlocked
如果锁处于unclocked状态,acquire()方法将其修改为locked并立即返回;如果锁已
处于locked状态,则阻塞当前线程并等待其他线程释放锁,然后将其修改为locked并立
即返回。
release()方法将锁状态由locked修改为unlocked并立即返回,如果锁状态本来已经
是unlocked,调用该方法将会抛出异常。
可重入锁RLock对象也是一种常用的线程同步原语,可被同一个线程acquire多次。
当处于locked状态时,某线程拥有该锁;当处于unlocked状态时,该锁不属于任何
线程。
RLock对象的acquire()/release()调用对可以嵌套,仅当最后一个或者最外层的release()
执行结束,锁被设置为unlocked状态。
三、重点、难点提示
(一)threading模块基本用法
(二)线程同步技术
四、思考与练习
编程实现教材上的示例
阅读书目
[1]基础教程(第2版.修订版).:人民邮电,2014.6.
[2]学习手册(第4版).:机械工业,2011.4.
[3]语言程序设计.:机械工业,2015.4.
[4]核心编程(第2版).:人民邮电,2008.7.