第1章 Python语言基础 1
1.1 Python语言横空出世 1
1.1.1编程世界的“琅琊榜” 1
1.1.2 Python语言的突出优势 2
1.1.3 Python语言的特点 2
1.2安装Python运行环境 3
1.2.1选择版本 3
1.2.2在Windows系统中下载并安装Python 4
1.2.3在MacOS系统中下载并安装Python 5
1.2.4在Linux系统中下载并安装Python 6
1.3使用IDLE开发Python程序 7
1.3.1 IDLE介绍 7
1.3.2使用IDLE开发第一个Python程序 8
实例1-1:输出显示一段文本信息 8
1.4使用PyCharm开发Python程序 10
1.4.1下载、安装并设置PyCharm 10
1.4.2使用PyCharm创建并运行一个Python程序 13
实例1-2:输出显示“Hello我们是TFBOYS组合!” 13
1.4.3 PyCharm常用功能介绍 16
第2章 Python基础语法 18
2.1独一无二缩进规则 18
2.1.1 Python缩进的严格要求 18
2.1.2一段使用缩进的Python程序 19
实例2-1:输出显示“Hello,欢迎来到Python世界!” 19
2.2注释是个好帮手 20
实例2-2:Python注释的演示使用 21
2.3编码要用心学好 21
2.3.1字符编码 21
2.3.2 Unicode编码和UTF-8编码 22
2.3.3 Python中的编码 23
2.4标识符和关键字 24
2.5变量就是一个存储空间 25
实例2-3:打印变量的值 26
实例2-4:同时给多个变量赋值 26
2.6输入和输出 27
2.6.1输入信息 27
实例2-5:获取用户输入的内容 27
2.6.2输出信息 27
实例2-6:使用函数print()输出信息 28
2.7字符串 29
2.7.1 Python字符串基础 29
2.7.2获取字符串中的值 30
实例2-7:打印输出字符串中的值 30
2.7.3修改字符串 30
实例2-8:修改字符串中的某个值 30
2.7.4使用转义字符 31
实例2-9:打印带有转义字符的内容 31
2.7.5格式化显示字符串 32
实例2-10:打印不同格式的字符串 32
2.7.6使用字符串处理函数 32
实例2-11:打印不同格式的“I love you” 33
2.8数字类型 34
2.8.1整数类型:int 34
2.8.2浮点型 34
2.8.3布尔型 35
2.8.4复数型 36
实例2-12:获取并显示各个变量的类型 36
2.9数字类型转换 36
2.9.1内置类型转换函数 37
实例2-13:使用函数int()实现整型转换 37
2.9.2类型转换综合演练 37
实例2-14:实现各种常见类型转换操作 38
第3章 运算符和表达式 39
3.1运算符和表达式介绍 39
3.2算术运算符和算术表达式 40
实例3-1:使用算术运算符解答简单数学题 40
3.3比较运算符和比较表达式 41
3.3.1比较运算符和比较表达式介绍 41
3.3.2使用比较运算符和比较表达式 41
实例3-2:比较两个整数 41
3.4赋值运算符和赋值表达式 42
3.4.1基本赋值运算符和表达式 42
实例3-3:新赛季勇士的场均目标得分和场均三分得分 42
3.4.2复合赋值运算符和表达式 43
实例3-4:对两个整数进行赋值处理 43
3.5位运算符和位表达式 44
3.5.1位运算符和位表达式介绍 44
3.5.2使用位运算符和位表达式 45
实例3-5:对整数进行位运算操作 45
3.6逻辑运算符和逻辑表达式 45
3.6.1逻辑运算符和逻辑表达式介绍 46
3.6.2使用逻辑运算符和逻辑表达式 46
实例3-6:对两个整数进行逻辑运算操作 46
3.7成员运算符和成员表达式 47
3.7.1成员运算符和成员表达式介绍 47
3.7.2使用成员运算符和成员表达式 47
实例3-7:判断某整数是否属于列表成员 47
3.8身份运算符和身份表达式 48
3.8.1身份运算符和身份表达式介绍 48
3.8.2使用身份运算符和身份表达式 48
实例3-8:判断a和b是否有相同的标识 48
3.9运算符的优先级 49
3.9.1 Python运算符的优先级介绍 49
3.9.2使用Python运算符的优先级 50
实例3-9:组合使用运算符 50
第4章 列表、元组和字典 51
4.1列表是最基本的数据结构 51
4.1.1列表的基本用法 51
实例4-1:创建一个名为girl的简单列表 51
实例4-2:创建了一个包含3个数字的列表 52
实例4-3:访问并显示列表中元素的值 52
实例4-4:使用列表中的值创建信息 53
4.1.2更新(修改)列表中的元素 53
实例4-5:修改girl列表中某个元素的值(“美丽”修改为“妖艳”) 53
4.1.3插入新的元素 53
实例4-6:使用方法insert()在girl列表中添加一个新元素(温柔) 54
4.1.4在列表中删除元素 54
实例4-7:使用del语句删除girl列表中的某个元素(美丽) 54
实例4-8:使用方法pop()删除girl列表中某个元素(端庄) 55
4.1.5列表排列 55
实例4-9:让列表girl中的元素按字母顺序排 55
实例4-10:使用方法sorted()排列列表c中的元素 56
4.1.6列表的高级操作 56
实例4-11:创建列表L并实现截取与拼接操作 57
实例4-12:创建3个列表并实现嵌套功能 57
4.2元组是一种特殊的列表 58
4.2.1创建并访问元组 58
实例4-13:创建两个元组(tup1,tup2)并访问显示元组元素 58
4.2.2修改元组 59
实例4-14:连接组合两个元组中的值并输出新元组 59
4.2.3删除元组 59
实例4-15:创新元组tup后删除整个元组 59
4.2.4使用内置方法操作元组 59
实例4-16:打印元组中的元素 60
4.2.5将序列分解为单独的变量 60
实例4-17:分解元组中的元素 60
4.3字典:成员以“键:值”对形式存在的数据类型 61
4.3.1创建并访问字典 61
实例4-18:创建字典dict并获取字典中3个键的值 62
4.3.2向字典中添加数据 62
实例4-19:创建字典dict并向其中添加两个数据 62
4.3.3修改字典 63
实例4-20:修改字典dict中Age元素的值 63
4.3.4删除字典中的元素 63
实例4-21:删除字典dict中的Name元素 63
4.3.5和字典有关的内置函数 63
实例4-22:输出字典diet中校花的基本资料 64
4.3.6遍历字典 64
实例4-23:返回一个字典中的所有键 64
实例4-24:使用方法values()遍历字典中的所有值 65
4.4集合是一个无序不重复元素的序列 65
实例4-25:创建集合student并实现各种操作 65
第5章 流程控制语句 67
5.1条件语句:是与不是 67
5.1.1条件语句介绍 67
5.1.2最简单的if语句 68
实例5-1:使用if语句判断所能承受的车票价格 68
5.1.3使用if…else语句 68
实例5-2:使用if…else语句判断所能承受的酒店价格 69
5.1.4使用if…elif…else语句 69
实例5-3:酒店入住体验打分系统 70
5.1.5 if语句的嵌套 70
实例5-4:判断一个数字的大小是否合适 70
5.1.6实现switch语句的功能 71
实例5-5:使用elif实现其他语言中的switch功能 72
实例5-6:用字典实现其他语言中的switch功能 73
5.2 for循环语句:全部走一遍 73
5.2.1基本的for循环语句 73
实例5-7:使用for循环语句输出英文单词的字母 74
5.2.2通过序列索引迭代 75
实例5-8:循环输出了列表fruits中的元素 75
5.2.3使用for…else循环语句 75
实例5-9:判断是否是质数(10~20之间的数字) 76
5.2.4嵌套for循环语句 76
实例5-10:获取两个整数之间的所有素数 76
5.3 while循环语句:不知道重复多少次 77
5.3.1基本的while循环语句 77
实例5-11:使用while循环语句显示小鸟的假期 78
5.3.2使用while…else循环语句 78
实例5-12:设置到5停止循环 79
5.3.3死循环问题 79
实例5-13:使用while循环时的死循环问题 79
5.3.4使用while循环嵌套语句 80
实例5-14:输出0到100之内的素数 80
5.4循环控制语句:处理突发事件 81
5.4.1使用break语句 81
实例5-15:使用break停止循环 82
5.4.2使用continue语句 82
实例5-16:循环输出字母和数字 82
5.4.3使用pass语句 83
实例5-17:输出指定字符串python中的每个英文字母 83
第6章 函数 85
6.1函数就是某个指定功能的语句 85
6.1.1定义函数 85
实例6-1:定义了一个基本的输出信息函数 86
6.1.2调用函数 86
实例6-2:定义表调用函数,计算元组内元素的和 86
6.2函数的参数 87
6.2.1形参和实参 87
6.2.2必需参数 87
实例6-3:一个错误用法 88
6.2.3关键字参数 88
实例6-4:打印网友的信息 88
实例6-5:在使用函数参数时不需要指定顺序 88
6.2.4默认参数 89
实例6-6:打印两个好友的信息 89
6.2.5不定长参数 89
实例6-7:在同一个函数中分别使用一个参数和三个参数 90
6.2.6按值传递参数和按引用传递参数 90
实例6-8:函数的参数是一个列表 90
6.3函数的返回值 91
6.3.1返回一个简单值 91
实例6-9:定义函数get_name()并通过形参返回一个简单的值 91
6.3.2可选实参 91
实例6-10:让实参变成一个可选参数 91
6.3.3返回一个字典 92
实例6-11:定义函数person()并让其返回值是一个字典 92
6.4变量的作用域 93
6.4.1三种变量作用域 93
6.4.2使用变量作用域 93
实例6-12:使用相互不影响的同名变量 93
实例6-13:使用关键字global在函数内部使用全局变量 94
6.5使用函数传递列表 94
6.5.1访问列表中的元素 94
实例6-14:定义函数users()并问候列表中的每个好友 94
6.5.2在函数中修改列表 95
实例6-15:定义函数copy()并复制好友到“亲人”分组 95
6.6 lambda来创建和使用匿名函数 96
6.6.1匿名函数介绍 96
6.6.2使用匿名函数 96
实例6-16:使用lambda创建匿名函数sum()并输出恋爱前后的幸福指数值 96
6.7函数和模块开发 97
6.7.1导入整个模块文件 97
实例6-17:导入模块文件的全部内容 97
6.7.2只导入指定的函数 98
实例6-18:导入模块文件中的某个函数 98
6.7.3使用as设置函数的别名 98
实例6-19:给函数设置一个别名 99
6.7.4使用as设置模块别名 99
实例6-20:给模块设置一个别名 99
6.7.5导入所有函数 99
实例6-21:使用“*”运算符导入外部模块文件中所有函数 100
第7章 面向对象编程技术 101
7.1面向对象基础 101
7.1.1 Python的面向对象编程 101
7.1.2 Python面向对象的几个核心概念 102
7.2定义并使用类 103
7.2.1定义一个类 103
7.2.2类的基本用法 104
实例7-1:财产分配说明书 104
7.3对象 104
实例7-2:使用类的对象 105
7.4方法 105
7.4.1定义并使用类方法 105
实例7-3:调用类方法打印信息 105
7.4.2构造方法 106
实例7-4:使用构造方法打印信息 106
实例7-5:霍老二的宠物狗 107
7.4.3方法调用 108
实例7-6:在类中调用类的自身方法和全局函数 108
7.4.4创建多个实例 108
实例7-7:创建多个不同的对象实例 109
7.4.5使用私有方法 109
实例7-8:打印网店的地址 110
7.4.6析构方法 110
实例7-9:打印三种客户类型信息 110
7.4.7静态方法和类方法 111
实例7-10:同时使用类方法和静态方法 111
7.4.8类的专有方法 112
7.5属性 112
7.5.1认识属性 113
7.5.2类属性和实例属性 113
实例7-11:改变变量的值 114
7.5.3设置属性的默认值 115
实例7-12:设置汽车的属性信息 115
7.5.4修改属性的值 116
实例7-13:通过实例修改霍老板新车的行驶里程 116
实例7-14:通过自定义方法修改霍老板新车行驶里程的方法 117
实例7-15:通过递增值修改霍老板新车的行驶里程 117
7.5.5使用私有属性 118
实例7-16:打印私有属性的值 118
7.6继承 118
7.6.1定义子类 118
实例7-17:霍老二的一辆豆腐车 119
7.6.2在子类中定义方法和属性 120
实例7-18:豆腐车的发动机参数 120
7.6.3子类可以继续派生新类 121
实例7-19:豆腐车的升级版 121
7.6.4私有属性和私有方法 122
实例7-20:不能相互访问私有变量 122
7.6.5多重继承 122
实例7-21:3个子类的多重继承 123
7.7方法重写 124
实例7-22:通过重写修改方法的功能 124
第8章 模块、包和迭代器 126
8.1模块架构 126
8.1.1最基本的模块调用 126
实例8-1:在程序中调用外部模块文件 126
实例8-2:外部模块文件和测试文件不在同一个目录 127
8.1.2目录“_pycache_” 128
实例8-3:编译指定的文件 128
8.1.3使用“_name_”属性 129
实例8-4:测试模块是否能正常运行 129
8.2包是管理程序模块的形式 130
8.2.1表示包 130
8.2.2创建并使用包 131
8.2.3创建并使用包 132
实例8-5:创建并使用包输出指定的内容 132
8.3迭代器:简化代码并节约内存 133
8.3.1什么是迭代器 133
实例8-6:使用for循环语句遍历迭代器 133
8.3.2创建并使用迭代器 134
实例8-7:打印迭代的元素 134
8.3.3使用内置迭代器协议方法iter() 134
实例8-8:显示迭代器中的数据元素 135
第9章 生成器、装饰器和闭包 136
9.1生成器:边循环边计算 136
9.1.1生成器的运行机制 136
实例9-1:使用yield生成器显示奥运会金牌榜的变化 137
9.1.2创建生成器 137
实例9-2:创建一个递减序列生成器 137
9.1.3生成器的第一次调用 139
实例9-3:重新初始化生成器生成初始值 139
9.1.4使用协程重置生成器序列 139
实例9-4:使用方法send()重置生成器的序列 139
9.2装饰器:拓展函数功能 140
9.2.1创建装饰器 140
9.2.2使用装饰器修饰函数 141
实例9-5:比较装饰器函数和非装饰器函数 141
实例9-6:比较调用前后的执行结果 142
9.2.3使用装饰器修饰类 142
实例9-7:打印x、y、z的坐标 142
9.3命名空间:存储变量与值对应关系的字典 143
9.3.1命名空间的本质 143
实例9-8:函数与其全局命名空间 144
9.3.2查找命名空间 145
实例9-9:查找嵌套函数命名空间 145
9.3.3命名空间的生命周期 146
9.3.4命名空间访问函数locals()与globals() 146
实例9-10:使用内置函数locals()访问局部命名空间 146
实例9-11:使用函数globals()访问全局命名空间 147
实例9-12:同时使用内置函数locals与globals,并分析三者区别 147
9.4闭包:函数和引用环境组合而成的实体 148
9.4.1什么是闭包 148
实例9-13:打印教练的信息 148
9.4.2闭包和嵌套函数 149
实例9-14:使用被嵌套函数中的变量 149
9.4.3使用闭包记录函数被调用的次数 150
实例9-15:统计调用函数的次数 150
第10章 文件操作处理 151
10.1文件操作基础 151
10.2使用File操作文件 152
10.2.1 File对象介绍 152
实例10-1:打开一个文件并查看其属性 153
10.2.2使用close()方法关闭操作 153
实例10-2:打开和关闭一个记事本文件 154
10.2.3使用方法flush() 154
实例10-3:使用flush()方法刷新缓冲区 154
10.2.4使用方法fileno() 154
实例10-4:使用方法fileno()返回文件描述符 154
10.2.5使用方法isatty() 155
实例10-5检测某文件是否连接到一个终端设备 155
10.2.6使用方法next() 155
实例10-6:返回文件各行内容 156
10.2.7使用方法read() 156
实例10-7:读取文件中3个字节的内容 156
10.3使用OS对象 157
10.3.1 OS对象介绍 157
10.3.2使用方法access() 159
实例10-8:获取指定文件的操作权限 159
10.3.3使用方法chdir() 160
实例10-9:修改当前工作目录到指定路径 160
10.3.4使用方法chmod() 160
实例10-10:修改指定文件或目录权限 161
10.3.5打开、写入和关闭 161
实例10-11:创建并打开文件“456.txt”,然后实现文件的打开、写入和关闭操作 162
10.3.6打开、读取和关闭 163
实例10-12:读取文件中的指定字符 163
10.3.7创建目录 163
实例10-13:使用方法mkdir()创建一个目录“top” 164
实例10-14:使用方法makedirs()创建一个目录“tmp/home/123” 164
第11章 标准库函数 166
11.1字符串处理函数 166
11.1.1分割字符串 166
实例11-1:使用函数split()分割指定的字符串 166
实例11-2:使用函数re.split()分割指定字符串 167
11.1.2字符串开头和结尾处理 167
实例11-3:使用函数startswith()和endswith()处理指定字符串 168
11.1.3实现字符串匹配处理 168
实例11-4:匹配处理各种类型的字符 169
11.1.4文本模式匹配和查找 170
实例11-5:查找字符串中字符 170
11.1.5文本查找和替换 170
实例11-6:使用函数replace()替换文本 170
11.1.6实现最短文本匹配 171
实例11-7:使用正则表达式实现最短文本匹配 171
11.1.7处理Unicode文本 171
实例11-8:Unicode字符串的代码点序列表示方法 171
实例11-9:使用函数normalize()归一化Unicode字符串 172
11.1.8删除字符串中的字符 172
实例11-10:删除字符串中的指定的内容 173
11.1.9字符过滤和清理 174
实例11-11:删除空格和Unicode组合字符 174
11.1.10字符串对齐处理 175
实例11-12:按照指定格式对齐字符串 176
11.1.11字符串连接和合并 176
实例11-13:合并给出的多个字符串 176
11.2数字处理函数 177
11.2.1使用math模块实现数学运算 178
实例11-14:使用函数abs()返回数字绝对值 178
实例11-15:使用函数ceil()返回最小整数值 178
实例11-16:使用两种格式的pow()函数 180
实例11-17:计算指定数字四舍五入值 180
11.2.2使用decimal模块实现精确运算 181
实例11-18:分别实现误差运算和精确运算 181
11.2.3处理二进制、八进制和十六进制数据 182
实例11-19:将一个整数转换为二进制、八进制或十六进制 182
11.2.4实现复数运算 183
实例11-20:操作处理复数数据 183
11.2.5使用fractions模块处理分数 184
实例11-21:对分数进行各种运算处理 185
11.2.6使用NumPy模块 185
实例11-22:创建一维数组和二维数组 185
11.3日期和时间函数 186
11.3.1使用时间模块 186
实例11-23:使用函数time.clock()实现时间处理 186
实例11-24:使用函数mktime(tupletime)实现时间操作 187
实例11-25:使用函数time.tzset()格式化显示时间 188
11.3.2使用Calendar日历模块 189
实例11-26:使用calendar模块函数显示日历 190
11.3.3使用datetime模块 191
实例11-27:使用类date打印系统日期信息 192
实例11-28:使用类date打印不同格式的日期 193
实例11-29:使用类time打印时间信息 194
实例11-30:使用类datetime打印系统时间信息 195
第12章 异常处理 196
12.1语法错误 196
实例12-1:代码拼写错误的执行输出 196
12.2常见异常处理方式 197
12.2.1异常的特殊之处 197
12.2.2使用“try…except”处理异常 198
实例12-2:处理变量错误 199
实例12-3一个try语句包含多个except子句的异常处理 199
12.2.3使用“try…excep…else”处理异常 199
实例12-4:处理索引异常 200
12.2.4使用“try…except…finally”语句 201
实例12-5:使用finally确保使用文件后能关闭这个文件 201
12.3抛出异常 202
12.3.1使用raise抛出异常 202
实例12-6:抛出错误异常 202
12.3.2使用assert语句抛出异常 203
实例12-7:抛出循环错误异常 203
12.3.3自定义异常 203
实例12-8:自己编写一个异常类 204
12.4内置异常类 204
12.4.1处理ZeroDivisionError异常 205
实例12-9:解决ZeroDivisionError类型的异常 205
12.4.2 FileNotFoundError异常 206
实例12-10:解决FileNotFoundError类型的异常 206
12.4.3使用except捕获异常 207
实例12-11:捕获程序中的所有异常 207
12.4.4逻辑错误的程序测试 207
实例12-12:使用函数testmod()实现单元测试 208
实例12-13:使用函数testfile()进行单元测试(测试案例不写在程序文件中) 209
第13章 正则表达式 210
13.1基本语法表达 210
13.1.1普通字符 210
13.1.2非打印字符 211
13.1.3特殊字符 211
13.1.4使用小括号指定分组 215
13.1.5限定符 215
13.1.6定位符 216
13.1.7限定范围和否定 217
13.1.8运算符优先级 218
13.1.9扩展表示法 218
13.2使用re模块 218
13.2.1 re模块库函数介绍 219
13.2.2使用compile()函数编译正则表达式 219
实例13-1:将正则表达式的字符串形式编译为Pattern实例 220
13.2.3使用函数match()匹配正则表达式 220
实例13-2:匹配无人驾驶网站的网址 221
实例13-3:验证邮箱地址 222
13.2.4使用函数search()扫描字符串并返回成功的匹配 222
实例13-4:使用函数search()扫描无人驾驶网址并返回结果 223
13.2.5使用函数findall()查找并返回符合的字符串 223
实例13-5:匹配操作字符串中的内容 223
13.2.6使用搜索替换函数sub()和subn() 224
实例13-6:用函数sub()替换字符串中的字母 224
13.2.7使用分割函数split() 225
实例13-7:使用函数split()分割指定字符串 225
13.2.8使用扩展符号 225
实例13-8:使用扩展符号对字符串进行扩展处理 226
13.3使用Pattern对象 226
实例13-9:使用函数compile()处理字符串 227
第14章 开发网络程序 228
14.1网络开发基础 228
14.1.1 OSI七层网络模型 228
14.1.2 TCP/IP协议 229
14.2 Socket套接字编程 230
14.2.1库Socket内置函数和属性 230
实例14-1:创建socket服务器端和客户端 231
14.2.2对象Socket的内置函数和属性 231
14.2.3使用socket建立TCP“客户端/服务器”连接 233
实例14-2:一个简易TCP聊天程序 233
14.2.4使用socket建立UDP“客户端/服务器”连接 235
实例14-3:一个简易UDP聊天程序 235
14.3 socketserver编程 236
14.3.1 socketserver模块基础 236
14.3.2使用socketserver创建TCP“客户端/服务器”程序 238
实例14-4:使用socketserver开发一个聊天程序 238
14.3.3使用ThreadingTCPServer创建“客户端/服务器”通信程序 239
实例14-5:使用ThreadingTCPServer创建一个聊天程序 239
14.4使用select模块实现多路I/O复用 240
14.4.1 select模块介绍 240
实例146:使用select同时监听多个端口 241
14.4.2 I/O多路复用并实现读写分离 242
实例14-7:使用select模拟多线程并实现读写分离 242
14.5使用urllib包 243
14.5.1 urllib包介绍 243
14.5.2使用urllib.request模块 244
实例14-8:在百度搜索关键词中得到第一页链接 245
14.5.3使用urllib.parse模块 245
实例14-9:实现HTTP身份验证 246
14.6使用http包 247
14.6.1使用http.client模块 248
14.6.2使用HTTPConnection对象访问指定网站 250
实例14-10:跑男A访问百度 250
14.7收发电子邮件 251
14.7.1开发POP3邮件程序 251
实例14-11:获取指定邮件中的最新两封邮件的主题和发件人信息 253
14.7.2开发SMTP邮件程序 254
实例14-12:使用SMTP协议发送邮件 254
14.7.3使用库email开发邮件程序 255
实例14-13:发送带附件功能邮件 255
14.8开发FTP文件传输程序 256
14.8.1 Python和FTP 256
14.8.2创建一个FTP文件传输客户端 257
实例14-14:开发一个简单的FTP文件传输系统 257
第15章 多线程开发 259
15.1线程和进程介绍 259
15.2使用threading模块 260
15.2.1 threading模块的核心方法 260
15.2.2使用Thread对象 260
实例15-1:在线程中运行一个函数 261
15.2.3使用Lock和RLock对象 262
实例15-2:使用RLock实现线程同步 262
实例15-3:使用Lock对临界区加锁 263
15.2.4使用Condition对象 264
实例15-4:捉迷藏游戏 264
15.2.5使用Semaphore和BoundedSemaphore对象 265
实例15-5:使用Semaphore对象运行4个线程 266
实例15-6:使用BoundedSemaphore对象运行4个线程 267
15.2.6使用Event对象 268
实例15-7:使用Event对象实现线程同步 268
15.2.7使用Timer对象 269
实例15-8:设置线程在延迟5秒后执行 269
15.2.8使用local对象 269
实例15-9:管理线程局部数据 269
15.3使用进程库multiprocessing 270
15.3.1 threading和multiprocessing的关系 270
15.3.2使用Process 270
实例15-10:使用Process对象生成进程 271
15.3.3使用Pipes和Queues对象 272
实例15-11:使用Pipe对象创建双向管道 272
15.3.4使用Connection对象 273
实例15-12:使用Connection对象处理数据 273
15.3.5使用共享对象Shared 273
实例15-13:创建共享ctypes对象 274
15.3.6 使用Manager对象 275
实例15-14:使用Manager对象操作list列表 275
15.4使用线程优先级队列模块queue 276
15.4.1模块queue中的常用方法 276
实例15-15:在线程之间实现数据通信 277
15.4.2基本FIFO队列 278
实例15-16:实现先进先出队列 278
15.4.3 LIFO队列 279
实例15-17:实现后进先出队列 279
15.4.4优先级队列 279
实例15-18:使用模块queue实现优先级队列 279
15.5使用模块subprocess创建进程 280
15.5.1全新的run()方法 280
15.5.2旧版本中的高级API 280
实例15-19:使用模块subprocess创建子进程 281
第16章 Tkinter图形化界面开发 283
16.1 Tkinter开发基础 283
16.1.1第一个tkinter程序 283
实例16-1:创建第一个GUI程序 283
16.1.2向窗体中添加组件 284
实例16-2:向窗体中添加文本和按钮 284
16.2 tkinter组件开发 285
16.2.1 tkinter组件概览 285
实例16-3:使用Frame布局窗体界面 286
16.2.2使用按钮控件 287
实例16-4:生成一个购物窗口并向其中添加4个按钮 287
16.2.3使用文本框控件 288
实例16-5:创建各种样式的文本框 289
16.2.4使用菜单控件 290
实例16-6:模拟实现记事本菜单 290
16.2.5使用标签控件 290
实例16-7:生成一个主窗口并在其中创建4个类型的标签 291
16.2.6使用单选按钮和复选按钮控件 292
实例16-8:生成一个主窗口并创建单选框和复选框 293
16.3开发tkinter事件处理程序 294
16.3.1 tkinter事件基础 294
实例16-9:创建一个“英尺/米”转换器 296
16.3.2动态绘图程序 297
实例16-10:简易绘图板 298
16.4实现对话框功能 300
16.4.1创建消息框 300
实例16-11:实现文本对话框效果 300
16.4.2创建输入对话框 302
实例16-12:创建可以输入内容的对话框 302
16.4.3创建文件打开/保存对话框 303
实例16-13:打开、保存指定的文件 303
16.4.4创建颜色选择对话框 304
实例16-14:颜色选择笔 304
16.4.5创建自定义对话框 304
实例16-15:创建两个指定样式的对话框 305
第17章 开发数据库程序 307
17.1操作SQLite3数据库 307
17.1.1 sqlite3模块介绍 307
实例17-1:执行指定SQL语句 308
实例17-2:使用方法cursor.executemany()执行SQL命令 308
实例17-3:同时执行多个SQL语句 309
实例17-4:生成SQLite shell命令 310
17.1.2使用sqlite3模块操作SQLite3数据库 311
实例17-5:在SQLite3数据库中创建表、添加/删除数据 311
17.1.3 SQLite和Python的类型 313
实例17-6:将自定义类Point适配SQLite3数据库 314
实例17-7:注册适配器函数 314
实例17-8:让sqlite3知道从数据库中实际选择的是一个点 315
17.1.4事物控制 316
实例17-9:开启智能commit功能 316
17.2操作MySQL数据库 317
17.2.1搭建PyMySQL环境 317
17.2.2实现数据库连接 318
实例17-10:显示PyMySQL数据库版本号 318
17.2.3创建数据库表 319
实例17-11:使用方法execute()创建一个新数据库表employee 319
17.2.4数据库插入操作 319
实例17-12:向数据库表中添加新的数据 319
17.2.5数据库查询操作 320
实例17-13:查询并显示工资大于1000的所有员工 320
17.2.6数据库更新操作 321
实例17-14:将数据库表中某个字段的值递增加1 321
17.2.7数据库删除操作 322
实例17-15:删除表中所有年龄大于20的数据 322
17.2.8执行事务 322
实例17-16:删除表中所有年龄大于19的数据 322
17.3使用MariaDB数据库 323
17.3.1搭建MariaDB数据库环境 323
17.3.2在Python程序中使用MariaDB数据库 326
实例17-17:连接MariaDB数据库并添加、查询数据 326
17.4使用适配器 327
实例17-18:访问MySQL、Gadfly和SQLite三种数据库 328
17.5使用ORM(对象关系映射)操作数据库 332
17.5.1 Python和ORM 332
17.5.2使用SQLAlchemy 332
实例17-19:使用SQLAlchemy分别操作MySQL和SQLite数据库 333
17.5.3使用mongoengine 335
实例17-20:使用mongoengine操作MongoDB数据库数据 336
第18章 使用Pygame开发游戏 338
18.1安装Pygame 338
18.2 Pygame开发基础 339
18.2.1 Pygame框架中的模块 339
实例18-1:使用Pygame开发一个简易飞行游戏 340
18.2.2事件操作 341
实例18-2:在Pygame框架中处理键盘事件 343
18.2.3显示模式设置 344
实例18-3:让游戏在全屏和非全屏模式之间进行转换 344
18.2.4字体处理 345
实例18-4:在游戏窗口中显示指定样式的文字 345
18.2.5像素和颜色处理 346
实例18-5:实现一个三原色颜色滑动条 346
18.2.6使用Surface绘制图像 347
实例18-6:在游戏界面随机绘制点 348
18.2.7使用pygame.draw绘图函数 348
实例18-7:随机绘制各种多边形 349
18.2.8游戏开发实践 350
实例18-8:简单的贪吃蛇游戏 350
第19章 Python Web开发 354
19.1使用Tornado框架 354
19.1.1 Tornado框架介绍 354
19.1.2 Python和Tornado框架 355
实例19-1:编写Tornado Web程序:杰克琼斯是男生的最爱 355
19.1.3获取请求参数 356
实例19-2:显示杰克琼斯官方旗舰店的欢迎信息 357
实例19-3:显示美特斯邦威的广告词 357
19.1.4使用cookie 358
实例19-4:在不同页面设置与获取cookie值 359
19.1.5 URL转向 359
实例19-5:实现两种URL转向功能 360
19.1.6使用静态资源文件 360
实例19-6:显示杰克琼斯商品的最畅销款 360
19.2使用Django框架 361
19.2.1搭建Django环境 361
19.2.2常用的Django命令 362
19.2.3第一个Django工程 363
实例19-7:输出显示“优衣库价格实惠” 364
19.2.4在URL中传递参数 366
实例19-8:参数加法计算器 366
19.2.5使用模板 368
实例19-9:显示优衣库的广告词 370
19.2.6使用表单 370
实例19-10:表单计算器 371
19.2.7实现基本的数据库操作 372
实例19-11:创建SQLite3数据库 372
19.2.8 Django后台系统应用实践 373
实例19-12:开发一个博客系统 373
19.3微框架Flask 376
19.3.1开始使用Flask框架 376
实例19-13:显示巴萨足球队的主赞助商 377
19.3.2传递URL参数 378
实例19-14:将不同的URL映射到同一个函数 378
实例19-15:使用get请求获取URL参数 379
19.3.3使用Session和Cookie 379
实例19-16:使用Cookie跟踪用户 380
19.3.4文件上传 381
实例19-17:开发一个Flask文件上传系统 381
第20章 数据可视化 382
20.1使用matplotlib 382
20.1.1搭建matplotlib环境 382
20.1.2初级绘图 384
实例20-1:使用Matplotlib绘制散点图 384
实例20-2:使用matplotlib绘制折线图 385
实例20-3:绘制指定样式的折线图 386
20.1.3自定义散点图样式 387
实例20-4:绘制指定样式的散点图 387
20.1.4绘制柱状图 389
实例20-5:绘制多个柱状图 389
20.1.5绘制多幅子图 390
实例20-6:同时绘制一个折线图和散点图 391
20.1.6绘制曲线 392
实例20-7:使用正弦函数和余弦函数绘制曲线 392
20.1.7绘制3D图表 392
实例20-8:绘制3D样式图表 393
20.2使用pygal库 393
20.2.1安装pygal库 393
20.2.2可视化模拟掷骰子游戏的数据 394
实例20-9:掷骰子100次的可视化模拟 394
20.2.3使用pygal绘制世界人口统计图 395
实例20-10:绘制2015年世界人口地图 395
20.3读写处理CSV文件 397
20.3.1 CSV模块介绍 397
20.3.2操作CSV文件 398
实例20-11:输出CSV文件中的日期和标题内容 398
实例20-12:提取并打印CSV文件中的指定内容 398
20.4使用Pandas库 399
20.4.1安装Pandas库 399
实例20-13:测试Pandas库是否安装成功并成功运行 399
20.4.2从CSV文件读取数据 399
实例20-14:读取并显示了CSV文件中的前3条数据 400
实例20-15:用规整的格式读取并显示CSV文件中的前3条数据 400
20.5使用NumPy库 401
20.5.1 NumPy基础 401
20.5.2数组对象 401
实例20-16:创建一个由4字节整数组成的2×3的二维数组 402
实例20-17:通过索引切片生成数组的视图 402
第21章 Python多媒体开发实战 403
21.1使用模块audioop处理原始音频数据 403
21.1.1内置模块audioop介绍 403
21.1.2使用模块audioop播放音乐 404
实例21-1:播放指定的音乐文件 404
21.2使用模块aifc 406
21.2.1模块aifc基础 406
21.2.2使用模块aifc获取多媒体文件的信息 407
实例21-2:打印某个多媒体文件的信息 407
21.3使用模块wave 408
21.3.1模块wave基础 408
21.3.2使用模块wave操作处理WAV文件 408
实例21-3:打印指定多媒体文件的信息 408
21.4基于tkinter模块的音乐播放器 410
实例21-4:多功能音乐播放器 410
第22章 开发网络爬虫 413
22.1网络爬虫基础 413
22.2开发简单的网络爬虫应用程序 414
22.2.1抓取××百科文字信息 414
实例22-1:打印输出抓取的爬虫信息 414
22.2.2抓取某贴吧信息 417
实例22-2:抓取×吧信息并保存到本地文件 418
22.3使用爬虫框架Scrapy 421
22.3.1 Scrapy框架基础 422
22.3.2搭建Scrapy环境 423
22.3.3创建第一个Scrapy项目 423
实例22-3:使用Scrapy开发一个简易爬虫程序 423
22.4综合实战——桌面壁纸抓取系统 427
22.4.1创建项目 427
22.4.2系统设置 427
22.4.3创建数据库 427
22.4.4声明需要格式化处理的字段 430
22.4.5实现保存功能类 430
22.4.6实现具体的爬虫 431
第23章 大数据实战:网络爬虫房价数据并数据分析 435
23.1背景介绍 435
23.2需求分析 435
23.3模块架构 436
23.4系统设置 436
23.4.1选择版本 436
23.4.2保存日志信息 437
23.4.3设置创建的文件名 437
23.4.4设置抓取城市 438
23.5破解反爬机制 440
23.5.1定义爬虫基类 440
23.5.2浏览器用户代理 441
23.5.3在线IP代理 441
23.6爬虫抓取信息 442
23.6.1设置解析元素 442
23.6.2抓取二手房信息 442
23.6.3抓取楼盘信息 446
23.6.4抓取小区信息 448
23.7数据可视化 451
23.7.1抓取数据并保存到数据库 451
23.7.2可视化济南市房价最贵的4个小区 455
23.7.3可视化济南市主要地区的房价均价 456