本书用滚雪球的思维讲解 Python 的知识体系。 本书共 31 章,分为 3 个部分。 第 1 部分为基础篇,包括第 1~15 章,介绍 Python 语言核心知识点。 第 2 部分为进阶篇,包括第 16~28 章,是进阶内容,也是 Python 语言的魅力点所在。通过对这部分 内容的学习,读者会全方位地感受到 Python 的灵活、迅捷、禅意。 第 3 部分为实战篇,包括第 29~31 章,通过 3 个实战案例,介绍 Python 的数据处理能力,以及 Python 在网站方面的应用。
第 1 部分 基础篇
1 Python 正确起手式 ................................................................................... 1
1.1 滚雪球学 Python 课程前置导语 ................................................................................... 1
1.2 Python 语言简介 ............................................................................................................ 1
1.2.1 Python 作者 ........................................................................................................ 2
1.2.2 Python 语言发展简介 ........................................................................................ 2
1.2.3 Python 语言的前景 ............................................................................................ 2
1.3 Python 环境安装 ............................................................................................................ 3
1.3.1 Python 3.7.x 安装 ............................................................................................... 3
1.3.2 PyCharm 安装 .................................................................................................... 4
1.4 学语言先学注释 ............................................................................................................ 8
1.4.1 注释符号 ............................................................................................................ 9
1.4.2 多行注释 ............................................................................................................ 9
1.5 认识变量 ...................................................................................................................... 10
1.5.1 变量命名规则 .................................................................................................. 11
1.5.2 不合规变量名举例 .......................................................................................... 11
1.6 打印输出函数 print() ................................................................................................... 12
1.7 数学运算及优先级问题 .............................................................................................. 12
1.8 赋值运算符 .................................................................................................................. 13
2 无门槛掌握数据类型与输入/输出函数 ..................................................... 14
2.1 基本数据类型 .............................................................................................................. 14
2.1.1 数值数据类型 .................................................................................................. 15
2.1.2 整数的不同形式表示 ...................................................................................... 15
2.1.3 数据类型强制转换 .......................................................................................... 16
2.1.4 扩展几个数值数据类型常用的函数 .............................................................. 17
2.1.5 布尔值数据类型 .............................................................................................. 18
2.1.6 字符串数据类型 .............................................................................................. 18
2.2 输入与输出 .................................................................................................................. 21
2.2.1 print()函数格式化输出 .................................................................................... 22
2.2.2 format()函数 ..................................................................................................... 23
2.2.3 input()函数数据输入 ....................................................................................... 24
3 无转折不编程 ......................................................................................... 25
3.1 关系运算符 .................................................................................................................. 25
3.2 算术运算符 .................................................................................................................. 26
3.3 逻辑运算符 .................................................................................................................. 27
3.4 编程中的转折——流程控制 ...................................................................................... 27
3.4.1 if 语句 .............................................................................................................. 27
3.4.2 if…else…语句 ................................................................................................. 29
3.4.3 if…elif…else…语句 ........................................................................................ 29
3.4.4 if 语句的嵌套................................................................................................... 30
4 列表一学完,Python 会一半 ................................................................... 31
4.1 列表是个啥 .................................................................................................................. 31
4.1.1 列表定义 .......................................................................................................... 31
4.1.2 列表读取 .......................................................................................................... 32
4.1.3 列表切片 .......................................................................................................... 33
4.1.4 列表相关内置函数 .......................................................................................... 33
4.1.5 列表元素的修改与删除 .................................................................................. 34
4.1.6 列表相加、相乘、删除 .................................................................................. 35
4.2 初识 Python 面向对象 ................................................................................................. 36
4.2.1 字符串对象的方法 .......................................................................................... 36
4.2.2 快速获取系统内置方法 .................................................................................. 37
4.3 通过方法增删列表元素 .............................................................................................. 38
4.3.1 追加列表元素 .................................................................................................. 38
4.3.2 插入列表元素 .................................................................................................. 39
4.3.3 删除列表元素 .................................................................................................. 40
4.4 列表排序 ...................................................................................................................... 40
4.4.1 排序方法 sort() ................................................................................................ 41
4.4.2 排序函数 sorted() ............................................................................................. 41
4.5 其他列表方法 .............................................................................................................. 42
4.5.1 检索元素索引 .................................................................................................. 42
4.5.2 统计列表元素出现次数 .................................................................................. 42
4.5.3 转换为字符串 .................................................................................................. 43
4.5.4 追加列表 .......................................................................................................... 43
4.6 多维列表 ...................................................................................................................... 43
4.7 特殊的列表字符串 ...................................................................................................... 44
4.7.1 字符串索引与切片 .......................................................................................... 44
4.7.2 可用于字符串的部分函数和方法 .................................................................. 44
4.7.3 将字符串转换为列表 ...................................................................................... 44
5 Python 循环的本质就是一段代码懒得重复写 .......................................... 45
5.1 for 循环 ........................................................................................................................ 45
5.1.1 for 循环基本使用 ............................................................................................ 45
5.1.2 for 循环嵌套 if 判断语句 ................................................................................ 46
5.2 range()函数 .................................................................................................................. 46
5.3 for 循环补充知识 ........................................................................................................ 48
5.3.1 for 循环嵌套 .................................................................................................... 48
5.3.2 break 终止循环 ................................................................................................ 49
5.3.3 continue 继续循环 ........................................................................................... 49
5.3.4 for…else 循环 .................................................................................................. 50
5.4 while 循环 .................................................................................................................... 51
5.4.1 while 循环的经典应用 .................................................................................... 51
5.4.2 while 循环其他说明 ........................................................................................ 52
6 Python 元组,不可变的列表 ................................................................... 53
6.1 元组的定义 .................................................................................................................. 53
6.2 读取元组中的元素 ...................................................................................................... 54
6.3 元组的其他知识补充 .................................................................................................. 54
6.4 元组与列表转换 .......................................................................................................... 55
6.5 内置函数 zip() ............................................................................................................. 55
6.6 元组的功能与应用场景 .............................................................................................. 56
7 字典怎么查,Python 字典就怎么用 ........................................................ 57
7.1 字典的基本操作 .......................................................................................................... 57
7.1.1 字典的定义 ...................................................................................................... 57
7.1.2 获取字典的值 .................................................................................................. 58
7.1.3 增加元素、修改元素、删除元素 .................................................................. 58
7.1.4 字典的补充知识 .............................................................................................. 59
7.2 字典的遍历 .................................................................................................................. 60
7.2.1 遍历字典的键值 .............................................................................................. 60
7.2.2 遍历字典的键 .................................................................................................. 61
7.2.3 遍历字典的值 .................................................................................................. 61
7.3 字典与其他数据类型的结合 ...................................................................................... 62
7.3.1 列表嵌套字典 .................................................................................................. 62
7.3.2 字典嵌套列表 .................................................................................................. 62
7.4 字典的方法 .................................................................................................................. 62
7.4.1 fromkeys()方法 ................................................................................................ 62
7.4.2 get()方法 .......................................................................................................... 63
7.4.3 setdefault()方法 ................................................................................................ 63
7.4.4 pop()方法 ......................................................................................................... 64
8 Python 中无序且元素唯一的数据类型——集合 ...................................... 65
8.1 集合是什么 .................................................................................................................. 65
8.1.1 集合的声明 ...................................................................................................... 65
8.1.2 set()函数定义集合 ........................................................................................... 66
8.2 集合的操作 .................................................................................................................. 67
8.2.1 交集 .................................................................................................................. 67
8.2.2 并集 .................................................................................................................. 67
8.2.3 差集 .................................................................................................................. 68
8.2.4 对称差集 .......................................................................................................... 68
8.3 集合的方法 .................................................................................................................. 69
8.3.1 集合的增删 ...................................................................................................... 69
8.3.2 集合的其地方法 .............................................................................................. 70
8.4 集合可用的内置函数和冻结集合 .............................................................................. 71
9 函数是 Python 基础部分的第一道难关.................................................... 72
9.1 函数出现的背景 .......................................................................................................... 72
9.2 函数初接触 .................................................................................................................. 72
9.2.1 函数的定义 ...................................................................................................... 72
9.2.2 无参数无返回值的函数 .................................................................................. 73
9.3 函数的参数设计 .......................................................................................................... 74
9.3.1 传递一个参数 .................................................................................................. 74
9.3.2 传递多个参数 .................................................................................................. 74
9.3.3 关键词参数 ...................................................................................................... 75
9.3.4 参数默认值 ...................................................................................................... 75
9.4 函数返回值 .................................................................................................................. 76
9.4.1 返回 None ........................................................................................................ 76
9.4.2 返回一个值 ...................................................................................................... 76
9.4.3 返回多个值 ...................................................................................................... 77
9.4.4 返回字典与列表 .............................................................................................. 77
9.5 调用函数时参数是列表 .............................................................................................. 77
9.6 局部变量与全局变量 .................................................................................................. 78
9.7 传递任意数量的参数 .................................................................................................. 79
9.7.1 普通参数与任意参数的组合 .......................................................................... 79
9.7.2 普通参数与任意数量的关键词参数 .............................................................. 80
9.8 函数的扩展学习 .......................................................................................................... 81
10 Python 面向对象的编程 ....................................................................... 82
10.1 类的定义与使用 ........................................................................................................ 82
10.1.1 定义类、属性与方法 .................................................................................... 82
10.1.2 属性与方法的调用 ........................................................................................ 83
10.1.3 类的构造函数 ................................................................................................ 84
10.1.4 属性初始值 .................................................................................................... 85
10.2 封装 ............................................................................................................................ 86
10.2.1 私有属性 ........................................................................................................ 86
10.2.2 私有方法 ........................................................................................................ 87
10.3 继承 ............................................................................................................................ 88
10.3.1 继承的简单应用 ............................................................................................ 88
10.3.2 子类与父类有相同名称的属性或方法 ........................................................ 89
10.3.3 子类用父类的方法 ........................................................................................ 90
10.4 多态 ............................................................................................................................ 91
10.5 多重继承 .................................................................................................................... 92
10.6 对象的数据类型判断 ................................................................................................ 92
10.7 isinstance()函数 ......................................................................................................... 92
10.8 特殊属性、方法 ........................................................................................................ 93
11 Python 模块的设计与应用 ................................................................... 95
11.1 将函数放到模块中 .................................................................................................... 95
11.2 应用函数模块 ............................................................................................................ 96
11.2.1 import 导入模块 ............................................................................................ 96
11.2.2 导入模块的某个函数 .................................................................................... 97
11.2.3 as 别名 ............................................................................................................ 97
11.3 将类放到模块中 ........................................................................................................ 98
11.3.1 import 导入模块 ............................................................................................ 98
11.3.2 导入模块中的类 ............................................................................................ 99
11.4 常见模块 .................................................................................................................... 99
11.4.1 随机数 random 模块 ...................................................................................... 99
11.4.2 时间模块 ...................................................................................................... 101
12 Python 文件读取与写入 ..................................................................... 102
12.1 文件夹和文件路径 .................................................................................................. 102
12.1.1 绝对路径和相对路径 .................................................................................. 103
12.1.2 os 模块与 os.path 模块 ................................................................................ 103
12.1.3 路径检查方法 .............................................................................................. 105
12.1.4 目录操作 ...................................................................................................... 105
12.1.5 获取文件大小 .............................................................................................. 106
12.1.6 获取指定目录下的所有内容 ...................................................................... 106
12.2 Python 读写文件 ...................................................................................................... 106
12.2.1 读取文件 ...................................................................................................... 106
12.2.2 写入文件 ...................................................................................................... 109
12.3 shutil 模块 ................................................................................................................ 110
12.3.1 文件复制 ...................................................................................................... 110
12.3.2 复制目录 ...................................................................................................... 111
12.3.3 多功能 move()方法 ..................................................................................... 111
12.3.4 删除有数据的目录 ...................................................................................... 111
13 Python 程序异常处理与 logging 模块 ................................................ 112
13.1 程序异常 .................................................................................................................. 112
13.1.1 最常见的错误——除数为 0 ....................................................................... 112
13.1.2 try…except 语句 .......................................................................................... 113
13.1.3 try…except…else 语句 ................................................................................ 114
13.2 异常类型 .................................................................................................................. 115
13.2.1 常见的异常类型 .......................................................................................... 115
13.2.2 捕捉多个异常 .............................................................................................. 116
13.2.3 一个 except 捕获多个异常 .......................................................................... 116
13.2.4 直接抛出异常 .............................................................................................. 116
13.3 finally 语句 .............................................................................................................. 117
13.4 日志模块 logging ..................................................................................................... 117
13.4.1 日志信息等级 .............................................................................................. 117
13.4.2 格式化 logging 日志信息 ............................................................................ 118
13.4.3 将程序日志输出到文件中 .......................................................................... 119
13.4.4 停用程序日志 .............................................................................................. 120
14 在 Python 中操作 SQLite 数据库 ....................................................... 121
14.1 SQLite 基本使用 ..................................................................................................... 121
14.2 建立 SQLite 数据库表 ............................................................................................ 122
14.3 向表中增加数据 ...................................................................................................... 124
14.4 查询数据库中的表数据 .......................................................................................... 125
14.5 更新表数据 .............................................................................................................. 126
14.6 删除表数据 .............................................................................................................. 127
15 Python 中的多线程与多进程.............................................................. 128
15.1 Python 中的多线程 .................................................................................................. 128
15.1.1 简单的多线程 .............................................................................................. 129
15.1.2 向子线程中传递参数 .................................................................................. 130
15.1.3 线程命名 ...................................................................................................... 131
15.1.4 Daemon 守护线程 ....................................................................................... 133
15.1.5 堵塞主线程 .................................................................................................. 134
15.1.6 使用 is_alive()方法检验子线程是否在工作 .............................................. 135
15.1.7 自定义线程类 .............................................................................................. 136
15.1.8 资源锁定与解锁 .......................................................................................... 136
15.2 subprocess 模块 ....................................................................................................... 137
15.2.1 Popen()方法 ................................................................................................. 138
15.2.2 Popen()方法的参数 ..................................................................................... 138
15.2.3 通过关键字 start 打开程序 ......................................................................... 138
第 2 部分 进阶篇
16 列表与元组、字典与集合 .................................................................. 139
16.1 为何列表和元组总放在一起 .................................................................................. 139
16.1.1 列表和元组的切片 ...................................................................................... 140
16.1.2 负数索引与二者相互转换 .......................................................................... 140
16.1.3 列表与元组的存储方式 .............................................................................. 140
16.1.4 列表和元组的应用场景 .............................................................................. 141
16.2 字典与集合的那些事儿 .......................................................................................... 143
16.2.1 字典和集合的基础操作 .............................................................................. 143
16.2.2 字典与集合的排序 ...................................................................................... 145
16.2.3 字典与集合的效率问题 .............................................................................. 146
17 列表推导式与字典推导式 .................................................................. 148
17.1 列表推导式 .............................................................................................................. 148
17.2 字典推导式 .............................................................................................................. 150
17.3 元组推导式与集合推导式 ...................................................................................... 151
18 lambda 表达式 .................................................................................. 152
18.1 lambda 表达式的基本使用 ..................................................................................... 152
18.2 lambda 表达式与 def 定义函数的区别 .................................................................. 153
18.3 lambda 表达式的应用场景 ..................................................................................... 154
18.4 不要滥用 lambda 表达式 ........................................................................................ 155
19 内置函数 filter()、map()、reduce()、zip()、enumerate() .................. 156
19.1 filter()函数 ............................................................................................................... 156
19.2 map()函数 ................................................................................................................ 156
19.3 reduce()函数 ............................................................................................................. 157
19.4 zip()函数 .................................................................................................................. 158
19.5 enumerate()函数 ....................................................................................................... 159
20 函数装饰器 ........................................................................................ 160
20.1 装饰器的基本使用 .................................................................................................. 160
20.2 对带参数的函数进行装饰 ...................................................................................... 162
20.3 多个装饰器 .............................................................................................................. 164
20.4 functools.wraps ........................................................................................................ 168
20.5 基于类的装饰器 ...................................................................................................... 169
20.6 内置装饰器 .............................................................................................................. 170
21 闭包................................................................................................... 171
21.1 闭包的基本操作 ...................................................................................................... 171
21.2 闭包的作用域 .......................................................................................................... 172
21.3 闭包的作用 .............................................................................................................. 173
21.4 判断闭包函数 .......................................................................................................... 173
21.5 闭包存在的问题 ...................................................................................................... 174
22 Python 中的日期与时间 ..................................................................... 175
22.1 日期/时间模块简介 ................................................................................................. 175
22.2 time 时间模块 .......................................................................................................... 176
22.2.1 get_clock_info()函数 ................................................................................... 176
22.2.2 获取时间戳 .................................................................................................. 178
22.2.3 获取可读时间 .............................................................................................. 178
22.2.4 单调时间 monotonic time ............................................................................ 179
22.2.5 处理器时钟时间 .......................................................................................... 179
22.2.6 性能计数器 time.perf_counter ..................................................................... 180
22.2.7 时间组件 ...................................................................................................... 180
22.2.8 解析和格式化时间 ...................................................................................... 181
22.2.9 time 模块 ...................................................................................................... 182
22.3 datetime 模块 ........................................................................................................... 182
22.3.1 date 类 .......................................................................................................... 182
22.3.2 time 类 .......................................................................................................... 184
22.3.3 datetime 类 ................................................................................................... 184
22.3.4 timedelta 类 .................................................................................................. 184
22.4 calendar 模块 ........................................................................................................... 185
23 global 和 nonlocal 作用域 .................................................................. 186
23.1 Python 中的作用域 .................................................................................................. 186
23.2 global 关键字 ........................................................................................................... 187
22.3 nonlocal 关键字 ....................................................................................................... 189
24 Python 中的哈希表与可哈希对象 ...................................................... 191
24.1 哈希表(散列表) .................................................................................................. 191
24.2 可哈希与不可哈希 .................................................................................................. 191
24.3 hash()函数 ................................................................................................................ 192
24.4 hashlib 模块 ............................................................................................................. 193
25 Python 内置模块之 random ............................................................... 194
25.1 基本随机函数 .......................................................................................................... 194
25.1.1 seed()与 random()函数 ................................................................................ 194
25.1.2 getstate()和 setstate(state)函数 .................................................................... 195
25.2 扩展随机函数 .......................................................................................................... 196
25.2.1 randint()和 randrange()函数 ........................................................................ 196
25.2.2 getrandbits(k)和 choice(seq)函数 ................................................................ 197
25.2.3 shuffle(seq)和 sample(pop,k)函数 ............................................................... 197
25.3 分布随机函数 .......................................................................................................... 197
25.3.1 uniform(a,b)、betavariate 和 triangular 函数 .............................................. 198
25.3.2 其他分布随机函数 ...................................................................................... 198
26 Python 内置模块之 re,正则表达式的初阶用法 ................................ 199
26.1 re 库的应用 .............................................................................................................. 199
26.1.1 正则表达式语法 .......................................................................................... 199
26.1.2 re 库的基本用法 .......................................................................................... 200
26.2 re 库相关函数说明 .................................................................................................. 201
26.2.1 re.search()函数 ............................................................................................. 201
26.2.2 re.match()函数 ............................................................................................. 202
26.2.3 re.findall()函数 ............................................................................................. 202
26.2.4 re.split()函数 ................................................................................................ 202
26.2.5 re.finditer()函数 ........................................................................................... 204
26.2.6 re.sub()函数 .................................................................................................. 204
26.3 re 库的面向对象写法 .............................................................................................. 205
26.4 re 库的 match 对象 .................................................................................................. 205
26.4.1 match 对象的属性 ....................................................................................... 205
26.4.2 match 对象的方法 ....................................................................................... 206
27 sys 库、os 库、getopt 库与 filecmp 库 .............................................. 207
27.1 os 库 ......................................................................................................................... 207
27.1.1 os 库路径操作 ............................................................................................. 208
27.1.2 os 库进程管理 ............................................................................................. 209
27.1.3 os 库运行环境相关参数.............................................................................. 209
27.2 sys 库 ........................................................................................................................ 210
27.2.1 常见参数 ...................................................................................................... 210
27.2.2 常见方法 ...................................................................................................... 211
27.3 getopt 库 ................................................................................................................... 212
27.4 filecmp 库 ................................................................................................................. 213
27.4.1 filecmp.cmp()、filecmp.cmpfiles()函数 ...................................................... 213
27.4.2 目录比较 ...................................................................................................... 214
28 类函数、成员函数、静态函数、抽象函数和方法伪装属性 ................ 215
28.1 类函数 ...................................................................................................................... 215
28.2 静态函数 .................................................................................................................. 216
28.3 类函数与静态函数在继承类中的表现 .................................................................. 217
28.4 抽象函数 .................................................................................................................. 218
28.5 方法伪装属性 .......................................................................................................... 219
第 3 部分 实战篇
29 爬虫案例——某育儿网问答数据抓取................................................. 222
29.1 爬虫分析 .................................................................................................................. 222
29.1.1 类别页面分析 .............................................................................................. 222
29.1.2 问题列表页面分析 ...................................................................................... 224
29.2 爬虫逻辑编码 .......................................................................................................... 225
29.2.1 逻辑编码(伪代码) .................................................................................. 225
29.2.2 requests 库中的 get()方法说明 ................................................................... 225
29.2.3 获取所有的分类页面地址 .......................................................................... 228
29.2.4 循环所有的分类页面地址 .......................................................................... 228
29.2.5 获取每个分类对应的列表页面,并获取总页码 ...................................... 229
29.2.6 从第 1 页循环到总页码 .............................................................................. 229
29.3 案例收尾 .................................................................................................................. 230
30 爬虫案例——奥特曼图片采集 ........................................................... 232
30.1 目标站点分析 .......................................................................................................... 232
30.2 编码 .......................................................................................................................... 234
31 Python 开源框架:Flask ................................................................... 239
31.1 Flask 简介 ................................................................................................................ 239
31.1.1 完成一个 hello world 网页 .......................................................................... 239
31.1.2 获取用户请求数据 ...................................................................................... 241
31.1.3 在 URL 中提供多个参数 ............................................................................ 242
31.2 在 Flask 中操作数据库 ........................................................................................... 244
31.3 使用 Flask 模块实现 ajax 数据入库 ....................................................................... 247